Twój problem polega na tym, że Twoje zapytanie nie zwraca tego, co myślisz, że zwraca (zawsze pomaga uruchomić je samodzielnie, aby sprawdzić, czy zestaw wyników jest zgodny z oczekiwaniami).
Dobrze, podzielmy to.
Próbujesz policzyć wszystkie posty, które nie mieć pasujący rekord w tabeli taksówek dla tego identyfikatora użytkownika. Tutaj chcesz JOIN
tabele i pobierz te wiersze w post
które normalnie byłyby wykluczone przez złączenie. Osiąga się to przez lewe sprzężenie zewnętrzne
(edytowany )
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
To HAVING
klauzula mówi:tylko te wiersze w zestawie wyników, które nie miały odpowiadającego t.taxiID.
Jeśli uruchomisz to zapytanie i otrzymasz oczekiwany zestaw wierszy (posty, które nie mają polubień lub niechęci tego użytkownika) WTEDY możesz dodać zewnętrzne zapytanie, aby policzyć liczbę zwróconych wierszy:
SELECT COUNT(*) as count FROM (
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
) a
Powinno to zwrócić pojedynczy skalar o nazwie count. W takim przypadku będziesz mógł powiedzieć:
if ($count[0]->count > 10) { blah blah blah }
(druga edycja ) To wewnętrzne zapytanie dostanie te posty, które mają wartość =1 w tabeli taksówek lub w ogóle nie mają wartości, co skutkuje zwróceniem 4 dla twojego przykładu:
SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1