Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL conta risultati di query complesse?

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