Autor Zpráva
Kcko
Profil
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
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 *
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
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.

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: