sql >> Databasteknik >  >> RDS >> Mysql

MySQL räkna komplexa frågeresultat?

Ditt problem är att din fråga inte returnerar det du tror att den returnerar (det hjälper alltid att köra din fråga fristående för att se om resultatuppsättningen är vad du förväntar dig).

Okej, låt oss dela upp det här.

Du försöker räkna alla inlägg som inte gör det ha en matchande post i taxitabellen för det användar-ID. Vad du vill här är att JOIN tabellerna och hämta dessa rader i post som normalt skulle uteslutas av anslutningen. Detta uppnås genom en vänster yttre sammanfogning

(redigerad )

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 där HAVING klausulen säger:endast de rader i resultatuppsättningen som inte hade ett motsvarande t.taxiID.

Om du kör den här frågan och får den förväntade uppsättningen rader (inlägg som inte har gilla eller ogillar av den användaren) DÅ kan du lägga till en yttre fråga för att räkna antalet returnerade rader:

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

Detta bör returnera en enda skalär namngiven count. I det här fallet kommer du att kunna säga:

if ($count[0]->count > 10) { blah blah blah }

(andra redigeringen ) Den här inre frågan ger dig de inlägg som antingen har värde =1 i taxitabellen eller inget värde alls, vilket resulterar i att 4 returneras för ditt exempel:

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


  1. Generera PHP-array från MySQL med nyckelvärde från id-kolumnen

  2. Ansluter Oracle 21c till SQL Server

  3. Hur infogar jag en byte[] i en SQL Server VARBINARY-kolumn

  4. MySQL 5.7 missar matchning mot ord med två kinesiska tecken