Autor Zpráva
anonymníí
Profil *
Ahoj,

mám tento SQL dotaz, který vrací neočekávané výsledky, resp. z nějkaého důvodu se mi násobí hodnota při COUNT(sloupec). Násobení vzniká asi díky těm LEFT JOINŮM, ale nevím, jak bych o opravil.

SELECT u.*,
       COUNT(a.user_id) AS user_count, -- tady mi to vraci 4 misto 1 (v tabulce je jeden sloupec s tímto ID, zbylé mají NULL)
       r.*,
       GROUP_CONCAT(us.s_id) AS s_ids
FROM u
LEFT JOIN a
    ON u.id = a.user_id
LEFT JOIN r
    ON r.user_id = u.id
LEFT JOIN r1
    ON r1.id = u.city
LEFT JOIN us
    ON  us.user_id = u.id AND
        us.s_id IN (4, 5, 6, 7, 8) AND
        us.value != ''
WHERE   u.active = 1 AND
        u.s_id IN (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31)
GROUP BY (CASE WHEN a.user_id IS NULL THEN u.id ELSE a.user_id END)
ORDER BY ...
LIMIT 0, 10

Za radu děkuji.
Tori
Profil
Proč nepoužíváte jen GROUP BY u.id, výsledek by měl být stejný, ne?
anonymníí
Profil *
Tori:
výsledek by měl být stejný, ne?
Jseš si tím jistá? Momentálně mám ten projekt jen ve správě, nemám přístup k celému FTP a nemám tedy možnost si to otestovat lokálně.

Bude to řešit i ten problém s násobením hodnot?

Děkuji.
Tori
Profil
anonymníí:
Celkem jsem, ale zkuste to. Ten hlavní problém by mělo řešit COUNT(DISTINCT a.user_id).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0