Autor Zpráva
ronnie
Profil
Zdravím, mám dotaz

SELECT count(*) as pocet
FROM anketa_ip
WHERE id_odpoved in (19,20,21)
GROUP BY id_odpoved

a v tabulce anketa_ip jen jeden záznam s id_odpoved 19.

Problém je v tom, že MySQL vybere jeden záznam takto:

pocet | id_odpoved
-------- ---------------
1 | 19

a já bych potřeboval, aby se vrátili tři řádky a u id_odpoved 20,21 se zobrazila nula.
Nevíte, jak na to?

Je to pro trošku složitější dotaz:

SELECT count(anketa_ip.ip) as pocet,
anketa_odpovedi.odpoved_cze as odpoved
FROM anketa_odpovedi LEFT JOIN anketa_ip
ON anketa_odpovedi.id = anketa_ip.id_odpoved
WHERE anketa_odpovedi.id_anketa = '.$_GET['id'].'
GROUP BY anketa_ip.id_odpoved'

který by měl vybírat odopovědi k určité anketě včetně počtu hlasujících.
tiso
Profil
..tak si skontroluj čo dostaneš a tie 0-ly si tam doplň... Veď ani keď tam dáš WHERE id_odpoved='20' tak Ti to nevrati 0 | 20
ronnie
Profil
To by šlo, kdybych znal hodnoty id_odpoved, ale ono je to spíš pro ten druhý dotaz, kdy se hodnoty generuji a ja předem nevím, kolik odpovědí v anketě bude...abych to zjistil, musel bych pokladat další dotaz, což mi příjde zbytečné...rád bych celou anketu obsloužil jen jedním dotazem;)
tiso
Profil
Tak napíš čo vlastne chceš... Asi si mal inkak navrhnúť databázu...
ronnie
Profil
ankety:

id
otazka_cze
otazka_pol
aktivní //pokud ma 1, znamená to, že si ji uživatel nastavil jako aktivní a bude se zobrazovat v uzivatelske casti

ankety_odpovedi:

id
odpoved_cze
odpoved_pol
id_anketa

ankety_ip:

ip
id_odpoved

Databaze je navržená dobře dle mého názoru. Nejprve si admin vloží otázku v určitém jazyce, následně vloží určitý počet odpovědí a uživatelé pak mohou hlasovat, vždy se do tabulky anketa_ip vloží ip adresa hlasujícího a id odpovědi, pro kterou hlasoval. Pomocí jednoho dotazu je třeba vybrat počet hlasujících pro jednotlivé odpovědi, názvy odpovědí u ankety, která je nastavena jako aktivní. Na dva dotazy to zvládne každý, ale určitě to jde i pomocí jednoho, stačí jen vyřešit, jak dostat z databáze hodnotu "0" pomocí count() u seskupování, i když tam žádné hodnoty nejsou.

Tedy úplně zjednodušeně, jak upravit dotaz

SELECT count(*) as pocet
FROM anketa_ip
WHERE id_odpoved in (19,20,21)
GROUP BY id_odpoved

i když neexistují žádné záznamy v tabulce anketa_ip. Tehdy se totiž vrátí jen jedna 0 k jednomu výsledku, ale já potřebuji vrátit 3 nuly k odpovědi 19,20,21 s tím, že nevyužiji PHP a získám to pouze přes MySQL.
tiso
Profil
SELECT count(ankety_ip.id_odpoved) as pocet

update: sorry, blbosť...

Sú 2 možnosti o ktorých viem - doplniť k odpovediam aj stĺpec s počtom odpovedí, alebo potom to PHP...
Kajman_
Profil *
SELECT sum(id_odpoved=19) odp19, sum(id_odpoved=20) odp20, sum(id_odpoved=21) odp21 ...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0