Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 27. 6. 2009, 18:36:03
Pujdu rovnou na vec, treba se nekdo zkusenejsi chyti :) ( Nejlepe kajman, ale neodmitnu jakoukoliv pomoc)
Jedna se o vygenerovani vysledku ve tvaru Domaci Tym ( hrac / hraci ) - Hostujici Tym (hrac / hraci ) Dulezita je tabulka hraci_zapasy, protoze jeden tym muze mit treba 5 hracu, proto tato vazebni tabulka a samanina s GROUP_CONCAT. Nize uvedeny dotaz funguje, je rychly, nicmene stale si myslim ze by se to obeslo bez tech dvou subselectu Rad bych tudiz ty 2 subselecty dostal k tem JOINUM. Vedel by nekdo diky? Tabulky zapasy ============= ID | domaciTym | hostujiciTym | soutezID | sezonaID | fazeID | kolo zapasy_hraci ============= zapasID | tymID | hracID rejstrik_tymy ============= ID | nazev hraci ============= id | prezdivka $sql = " SELECT t1.nazev domaciTym, t2.nazev hostujiciTym, (SELECT GROUP_CONCAT('<a href=\"/uzivatele/\">', h.prezdivka, '</a>' SEPARATOR ', ') FROM zapasy_hraci zh JOIN hraci h ON h.id = zh.hracID WHERE zapasID = z.ID AND tymID = z.domaciID) domaci, (SELECT GROUP_CONCAT('<a href=\"/uzivatele/\">', h.prezdivka, '</a>' SEPARATOR ', ') FROM zapasy_hraci zh JOIN hraci h ON h.id = zh.hracID WHERE zapasID = z.ID AND tymID = z.hosteID) hoste, z.* FROM zapasy z JOIN rejstrik_tymy t1 ON t1.ID = z.domaciID JOIN rejstrik_tymy t2 ON t2.ID = z.hosteID WHERE z.soutezID = $soutezID AND z.sezonaID = $sezonaID AND z.fazeID = $fazeID AND z.kolo = $this->kolo AND ( z.domaciID > 0 AND z.hosteID > 0 ) /* lichy tym nechci ! */ GROUP BY z.ID ORDER BY kolo ASC , ID ASC "; //debug($sql); return DIBI::fetchAll($sql); |
||
TomášK Profil |
#2 · Zasláno: 27. 6. 2009, 19:02:19
Zkusím:
SELECT t1.nazev domaciTym, t2.nazev hostujiciTym, GROUP_CONCAT('<a href=\"/uzivatele/\">', h1.prezdivka, '</a>' SEPARATOR ', ') AS domaci, GROUP_CONCAT('<a href=\"/uzivatele/\">', h2.prezdivka, '</a>' SEPARATOR ', ') AS hoste, z.* FROM zapasy z JOIN rejstrik_tymy t1 ON t1.ID = z.domaciID JOIN rejstrik_tymy t2 ON t2.ID = z.hosteID JOIN zapasy_hraci zh1 ON zh1.zapasID = z.ID AND zh1.tymId = z.domaciID JOIN zapasy_hraci zh2 ON zh2.zapasID = z.ID AND zh2.tymId = z.hosteID JOIN hraci h1 ON h1.ID = zh1.hracID JOIN hraci h2 ON h2.ID = zh2.hracID WHERE z.soutezID = $soutezID AND z.sezonaID = $sezonaID AND z.fazeID = $fazeID AND z.kolo = $this->kolo AND ( z.domaciID > 0 AND z.hosteID > 0 ) /* lichy tym nechci ! */ GROUP BY z.ID ORDER BY kolo ASC , ID ASC |
||
unit353 Profil * |
#3 · Zasláno: 27. 6. 2009, 22:21:25
kdyby se podmínka
[i]WHERE z.soutezID = $soutezID[/i] přesunula do JOIN rejstrik_tymy t1 ON t1.ID = z.domaciID [b]AND z.soutezID = $soutezID[/b] zrychlilo by to dotaz? Prakticky všechny WHERE klauzule bych dal do prvního joinu. Ale nevím, jestli to je nebo není rychlejší. Dík za odpověd. |
||
Kcko Profil |
#4 · Zasláno: 28. 6. 2009, 10:26:00
„SELECT
t1.nazev domaciTym, t2.nazev hostujiciTym, GROUP_CONCAT('<a href=\"/uzivatele/\">', h1.prezdivka, '</a>' SEPARATOR ', ') AS domaci, GROUP_CONCAT('<a href=\"/uzivatele/\">', h2.prezdivka, '</a>' SEPARATOR ', ') AS hoste, z.* FROM zapasy z JOIN rejstrik_tymy t1 ON t1.ID = z.domaciID JOIN rejstrik_tymy t2 ON t2.ID = z.hosteID JOIN zapasy_hraci zh1 ON zh1.zapasID = z.ID AND zh1.tymId = z.domaciID JOIN zapasy_hraci zh2 ON zh2.zapasID = z.ID AND zh2.tymId = z.hosteID JOIN hraci h1 ON h1.ID = zh1.hracID JOIN hraci h2 ON h2.ID = zh2.hracID WHERE z.soutezID = $soutezID AND z.sezonaID = $sezonaID AND z.fazeID = $fazeID AND z.kolo = $this->kolo AND ( z.domaciID > 0 AND z.hosteID > 0 ) /* lichy tym nechci ! */ GROUP BY z.ID ORDER BY kolo ASC , ID ASC“ Diky Tomasi, vysledek nic bohuzel neukaze. Takhle nejak jsem to zkousel taky a dosel jsem az k funkcnimu vysledku, jenze pak se stalo ze ze za tym X hrali 2 hraci za tym tym Y 3 a SQL vysledek pak byl tym X ( hrac 1, hrac 2, hrac 2 ) // tady dosadilo SQL dalsiho hrace podle tymu Y ( resp stejny pocet ) Kaslem na to, vim ze bez surovych dat nema smysl to moc zkouset :-) , necham tam ten svuj prvni dotaz. Diky za help a pekny den unit353 Vsechno by tam presunout neslo a rychlejsi by to nebylo. Me spis zajimalo jak to chtel resit Tomas, ale nefunguje. |
||
Časová prodleva: 15 let
|
0