Autor | Zpráva | ||
---|---|---|---|
Petr Ká Profil |
#1 · Zasláno: 26. 2. 2012, 21:55:46 · Upravil/a: Moderátor (editace znemožněna) 27. 2. 2012, 01:28:12
Ahoj
Vytvářím si na webu události obdoby událostí na Facebooku a řeším problém s dotazem na databázi. Pokud potvrdím účast, tak se událost zobrazí správně ve výpisu událostí, kterých se zůčastním ale počet zůčastněných vrací nesmysl... mysql_query( "SELECT @ide:=a.id,a.id,a.vytvoreno,a.od,a.nadpis,a.do,a.podnik,a.obrazek, COUNT(b.id) as ucast FROM events a, events_ucast b WHERE a.active=1 AND a.do > ".time()." AND '".db_esc($_GET['id'])."' IN (SELECT c.user FROM events_ucast c WHERE c.event=ide AND (c.ucast=1 OR c.ucast=2)) AND a.id=b.event;" ) Tabulka "events" : 1 id int(11) 2 vytvoril int(11) 3 vytvoreno int(11) 4 od int(11) 5 do int(11) 6 nadpis varchar(255) utf8_czech_ci 7 podnik text utf8_czech_ci 8 text text utf8_czech_ci 9 obrazek varchar(255) utf8_czech_ci 10 active int(11) Tabulka "events_ucast" 1 id int(11) 2 event int(11) 3 user int(11) 4 ucast int(11) 5 date int(11) |
||
Kajman Profil |
#2 · Zasláno: 26. 2. 2012, 22:04:18
Možná takto nějak...
SELECT a.id,a.id,a.vytvoreno,a.od,a.nadpis,a.do,a.podnik,a.obrazek, COUNT(b.id) as ucast FROM events a, events_ucast b, events_ucast c WHERE a.active=1 AND a.do > ".time()." AND c.user=$id AND (c.ucast=1 OR c.ucast=2) AND c.event=b.event AND a.id=c.event |
||
Petr Ká Profil |
#3 · Zasláno: 26. 2. 2012, 22:06:32
Kajman
Děkuji za reakci, ale výsledek je stále stejný |
||
Kajman Profil |
#4 · Zasláno: 26. 2. 2012, 22:12:38
Těžko říct, co to vrací. Můžete poslat vzor dat, napsat, co to vrací a co očekáváte?
Určite tam vlastně chybí group by a.id AND b.ucast IN (1,2) count(distinct b.user) A na webu si napište to slovo zúčastnit raději s čárkou na u. |
||
Petr Ká Profil |
#5 · Zasláno: 26. 2. 2012, 22:27:47
Super, po úpravě dotaz funguje.
Po úpravě tedy nakonec vypadá následovně mysql_query("SELECT a.id,a.id,a.vytvoreno,a.od,a.nadpis,a.do,a.podnik,a.obrazek, COUNT(DISTINCT b.user) as ucast FROM events a, events_ucast b, events_ucast c WHERE a.active=1 AND a.do > ".time()." AND c.user='".db_esc($_GET['id'])."' AND (c.ucast=1 OR c.ucast=2) AND c.event=b.event AND a.id=c.event GROUP BY a.id;"); Ještě bych měl jeden dotaz, týkající se těchto dvou tabulek. Momentálně mi dotaz, který vrací tzv. "Moje události" (ty, které jsem vytvořil já) vrací chybu : Warning: mysql_query() [function.mysql-query]: Unable to save result set in mysql_query("SELECT a.id,a.*,(SELECT COUNT(DISTINCT s.id) FROM events_ucast s WHERE s.event=a.id GROUP BY s.user) as ucast FROM events a WHERE vytvoril='".db_esc($_GET['id'])."' AND a.active=1 AND a.do > ".time()." ORDER BY a.do DESC, a.od DESC, a.vytvoreno DESC LIMIT 15;"); |
||
Kajman Profil |
#6 · Zasláno: 26. 2. 2012, 22:29:28
V druhém dotaze naopak group by přebývá.
|
||
Petr Ká Profil |
#7 · Zasláno: 26. 2. 2012, 22:32:09
Děkuji, nyní vše funguje skvěle.
|
||
Časová prodleva: 12 let
|
0