Dit problem er, at din forespørgsel ikke returnerer, hvad du tror, den returnerer (det hjælper altid at køre din forespørgsel selvstændigt for at se, om resultatsættet er, hvad du forventer).
Okay, lad os opdele det her.
Du prøver at tælle alle indlæg, der ikke har en matchende post i taxa-tabellen for det bruger-id. Hvad du vil her er at JOIN
tabellerne og få disse rækker i post
som normalt ville blive udelukket af sammenslutningen. Dette opnås ved en venstre ydre sammenføjning
(redigeret )
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
Den HAVING
klausulen siger:kun de rækker i resultatsættet, der ikke havde et tilsvarende t.taxiID.
Hvis du kører denne forespørgsel og får det forventede sæt rækker (indlæg, der ikke har likes eller dislikes af den bruger), SÅ kan du tilføje en ydre forespørgsel for at tælle antallet af returnerede rækker:
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
Dette bør returnere en enkelt skalar navngivet count. I dette tilfælde vil du være i stand til at sige:
if ($count[0]->count > 10) { blah blah blah }
(2. redigering ) Denne indre forespørgsel vil give dig de indlæg, der enten har værdi =1 i taxa-tabellen eller slet ingen værdi, hvilket resulterer i, at 4 returneres for dit eksempel:
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