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