Il tuo problema è che la tua query non restituisce ciò che pensi restituisca (è sempre utile eseguire la query autonomamente, per vedere se il set di risultati è quello che ti aspetti).
Bene, analizziamolo.
Stai provando a contare tutti i post che non avere un record corrispondente nella tabella taxi, per quell'ID utente. Quello che vuoi qui è JOIN
le tabelle e ottieni quelle righe in post
che normalmente sarebbe escluso dal join. Ciò si ottiene con un join esterno sinistro
(modificato )
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
Quel HAVING
la clausola dice:solo quelle righe nel set di risultati che non avevano un t.taxiID corrispondente.
Se esegui questa query e ottieni il set di righe previsto (post che non hanno Mi piace o Non mi piace da quell'utente), ALLORA puoi aggiungere una query esterna per contare il numero di righe restituite:
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
Questo dovrebbe restituire un singolo conteggio scalare denominato. In questo caso potrai dire:
if ($count[0]->count > 10) { blah blah blah }
(2a modifica ) Questa query interna ti porterà quei post che hanno valore =1 nella tabella taxi o nessun valore, il che si traduce nella restituzione di 4 per il tuo esempio:
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