Autor | Zpráva | ||
---|---|---|---|
ronnie Profil |
#1 · Zasláno: 9. 9. 2006, 09:29:31
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 |
#2 · Zasláno: 9. 9. 2006, 20:10:46
..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 |
#3 · Zasláno: 9. 9. 2006, 21:23:52
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 |
#4 · Zasláno: 9. 9. 2006, 23:05:48
Tak napíš čo vlastne chceš... Asi si mal inkak navrhnúť databázu...
|
||
ronnie Profil |
#5 · Zasláno: 10. 9. 2006, 12:22:39
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 |
#6 · Zasláno: 10. 9. 2006, 15:12:39 · Upravil/a: tiso
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 * |
#7 · Zasláno: 10. 9. 2006, 17:27:07
SELECT sum(id_odpoved=19) odp19, sum(id_odpoved=20) odp20, sum(id_odpoved=21) odp21 ...
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0