Autor Zpráva
Petr Ká
Profil
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
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
Kajman

Děkuji za reakci, ale výsledek je stále stejný
Kajman
Profil
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
A nemá tam být tedy ještě verze té učasti?
AND b.ucast IN (1,2)
Případně ještě raději
count(distinct b.user)

A na webu si napište to slovo zúčastnit raději s čárkou na u.
Petr Ká
Profil
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
Dotaz na DB
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
V druhém dotaze naopak group by přebývá.
Petr Ká
Profil
Děkuji, nyní vše funguje skvěle.

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: