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

MySQL tæller komplekse forespørgselsresultater?

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


  1. At skabe et én til mange polymorfisk forhold til doktrin

  2. Hvordan analyserer jeg Json-data fra openlibrary api? (korrekt)

  3. SQL 'LIKE'-forespørgsel ved hjælp af '%', hvor søgekriteriet indeholder '%'

  4. MySQL Rekursiv CTE-tabel eksisterer ikke