To jest szybkie zapytanie sql dotyczące skryptu „zaproś znajomych do tej grupy”.
Mam 2 tabele: users i group_members. Próbuję wykonać zapytanie, które wybiera wszystkich moich znajomych — reprezentowanych przez pierwszy wybór — i odejmuje wszystkich moich znajomych od użytkowników, którzy są już reprezentowani i stanowią część grupy — reprezentowanych przez drugi wybór.
Ciągle otrzymuję błąd składni i nie jestem pewien, dlaczego. Kiedy uruchamiam każde zapytanie wybierające samo, wyświetla mi ono poprawnie wszystkie identyfikatory uid moich znajomych (przy użyciu pierwszego zapytania), a także wszystkie identyfikatory użytkowników członków grupy (przy użyciu drugiego zapytania).
(SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location FROM users a, friends b WHERE a.uid = b.friend_two AND b.friend_one = $VAR
MINUS
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location FROM users a, group_members m WHERE m.teamid = 95 and a.uid = m.userid)
2 odpowiedzi
MySQL nie obsługuje MINUS
. Zazwyczaj można go odtworzyć za pomocą podzapytania NOT IN
. To może wykonać zadanie:
SELECT
a.uid,
a.name_f,
a.name_l,
a.profile_pic,
a.location
FROM users a, friends b
WHERE a.uid = b.friend_two AND b.friend_one = $VAR
AND a.uid NOT IN (
SELECT subuser.uid FROM users subuser, group_members m WHERE m.teamid = 95 AND subuser.uid = m.uid
)
W tym celu możesz użyć podzapytania:
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location
FROM users a, friends b
WHERE a.uid = b.friend_two
AND b.friend_one = $VAR
AND a.uid NOT IN (
SELECT a.uid FROM users a, group_members m
WHERE m.teamid=95 AND a.uid=m.userid)
Zobacz, jak Twoje drugie zapytanie jest częścią AND a.uid NOT IN (second_query)
?
W rzeczywistości myślę, że możesz to zrobić nawet bez podzapytania:
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location
FROM users a
JOIN friends b ON a.uid = b.friend_two
JOIN group_members m ON a.uid=m.userid
WHERE b.friend_one = $VAR
AND m.teamid != 95
To po prostu łączy wszystkie stoły razem, wybiera te z odpowiednim b.friend_one
i odfiltrowuje te, które już znajdują się w m.teamid
.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.