| 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: 17 let
|
|||
0