sql >> Databáze >  >> RDS >> Mysql

Počítá MySQL komplexní výsledky dotazů?

Váš problém je, že váš dotaz nevrací to, co si myslíte, že vrací (vždy pomůže spustit dotaz samostatně, abyste zjistili, zda sada výsledků odpovídá vašim očekáváním).

Dobře, pojďme to rozebrat.

Pokoušíte se počítat všechny příspěvky, které ne mít odpovídající záznam v tabulce taxi pro toto ID uživatele. Zde chcete JOIN tabulky a získat tyto řádky v post které by normálně bylo spojením vyloučeno. Toho je dosaženo levým vnějším spojením

(upraveno )

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

To HAVING klauzule říká:pouze ty řádky v sadě výsledků, které neměly odpovídající t.taxiID.

Pokud spustíte tento dotaz a získáte očekávanou množinu řádků (příspěvky, které daný uživatel nemá hodnocení Líbí se nebo Nelíbí se mi), PAK můžete přidat vnější dotaz, abyste spočítali počet vrácených řádků:

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

To by mělo vrátit jeden skalární pojmenovaný počet. V tomto případě budete moci říci:

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

(2. úprava ) Tento vnitřní dotaz vám poskytne příspěvky, které mají v tabulce taxi hodnotu buď =1, nebo žádnou hodnotu, což má za následek, že se pro váš příklad vrátí 4:

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. Jak vyřešit django.db.utils.IntegrityError:(1364, pole 'name' nemá výchozí hodnotu)

  2. Míchání starého mysql s PDO

  3. MySQL Workbench – Forward Engineering – Chyba 1005:Nelze vytvořit tabulku (chyba:150)

  4. Tipy pro ukládání záloh MariaDB v cloudu