Autor Zpráva
Foizo
Profil
Zdrawim,

peru se s takový menším problémem. Chci od databáze výpis utkání a jejich výsledků v tomto formátu:

2014-02-27 Budvarka Neprakta Most
mVH(4K)
Foizo 2:0 Satanda
Foizo 0:2 Satanda

2014-02-28 Pod Tribunou Most
vVH(4K)
Foizo 2:0 Satanda
Foizo 0:2 Satanda

- jedná se o utkání v karambolu ( za jméno každého hráče ještě příjodou další čísla, ale pro ukazku zobrazení to stačí)

Jak vypadájí tabulky v databázi?


Jaký dotaz jsem použil?
SELECT `s`.`date`, `pl`.`placename`, `t`.`typezkr`, `p`.`nick`, `sc`.`point`
FROM `game` AS `g`
INNER JOIN `sesion` AS `s` ON `g`.`sesion_id` = `s`.`sesion_id`
INNER JOIN `place` AS `pl` ON `s`.`place_id` = `pl`.`place_id`
INNER JOIN `type` AS `t` ON `g`.`type_id` = `t`.`type_id`
INNER JOIN `score` AS `sc` ON `g`.`game_id` = `sc`.`games_id`
INNER JOIN `player` AS `p` ON `sc`.`player_id` = `p`.`player_id`

Ve výstupní poli pak data vypadají takto
Array
(
    [0] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [nick] => Foizo
            [point] => 2
        )

    [1] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [nick] => Satanda
            [point] => 0
        )

    [2] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [nick] => Foizo
            [point] => 0
        )

    [3] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [nick] => Satanda
            [point] => 2
        )

    [4] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [nick] => Foizo
            [point] => 2
        )

    [5] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [nick] => Satanda
            [point] => 0
        )

    [6] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [nick] => Foizo
            [point] => 0
        )

    [7] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [nick] => Satanda
            [point] => 2
        )

)

Sice veškerá požadovaná data toto pole obsahuje, ale s následou úpravou na požadované zobrazení si nevim rady...
Kajman
Profil
Co přidat do tabulky game dva sloupečky - id domácího hráče a id hostující hráče? Pak by se daly ty výsledky lépe párovat a bylo by jasné, kdo má být na prvním a kdo na druhém místě.

Pro výpis datumů a soutěže jen když se to mění, mrkněte na Nadpis skupiny
Foizo
Profil
tak se povedlo, doplnil jsem sloupečky do game a následující dotaz mi pak vyhodí přesně to co potřebuji... díky za pomoc.
Ještě otázka - není ten dotaz přehnanej? jsem začátečník, pokud jde napsat i v kratší verzi rád se přiučím...

SELECT `s`.`date`, `pl`.`placename`, `t`.`typezkr`, `p1`.`nick` AS `player1`, `sc1`.`point` AS `score1`,`p2`.`nick` AS `player2`, `sc2`.`point` AS `score2`
FROM `game` `g`
INNER JOIN `sesion` AS `s` ON `g`.`sesion_id` = `s`.`sesion_id`
INNER JOIN `place` AS `pl` ON `s`.`place_id` = `pl`.`place_id`
INNER JOIN `type` AS `t` ON `g`.`type_id` = `t`.`type_id`
INNER JOIN `player` AS `p1` ON `g`.`f_player_id` = `p1`.`player_id`
INNER JOIN `score` AS `sc1` ON `g`.`game_id` = `sc1`.`games_id`
INNER JOIN `player` AS `p2` ON `g`.`s_player_id` = `p2`.`player_id`
INNER JOIN `score` AS `sc2` ON `g`.`game_id` = `sc2`.`games_id`
WHERE `g`.`s_player_id` = `sc2`.`player_id`
AND `g`.`f_player_id` = `sc1`.`player_id`

Výstup
Array
(
    [0] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [player1] => Foizo
            [score1] => 2
            [player2] => Satanda
            [score2] => 0
        )

    [1] => Array
        (
            [date] => 2014-03-27
            [placename] => Budvarka Neprakta Most
            [typezkr] => mVH(4K)
            [player1] => Foizo
            [score1] => 0
            [player2] => Satanda
            [score2] => 2
        )

    [2] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [player1] => Foizo
            [score1] => 2
            [player2] => Satanda
            [score2] => 0
        )

    [3] => Array
        (
            [date] => 2014-04-28
            [placename] => Pod Tribunou Most
            [typezkr] => vVH(4K)
            [player1] => Foizo
            [score1] => 0
            [player2] => Satanda
            [score2] => 2
        )

)
Kajman
Profil
Místo jednoho velkého se dá dělat i po jednom dotaze do každé tabulky, ale je potřeba programovat více logiky v php. Záleží, jak se Vám s tím bude lépe pracovat.
http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php

Pokud je ten dotaz svižný a už to funguje, tak to s klidným svědomím nechte. Snad jen z where bych ty podmínky na provázání tabulek dal rovnou k příslušnému joinu a doplnil řazení, aby fungoval odkazovaný "Nadpis skupiny".

SELECT `s`.`date`,
       `pl`.`placename`,
       `t`.`typezkr`,
       `p1`.`nick`   AS `player1`,
       `sc1`.`point` AS `score1`,
       `p2`.`nick`   AS `player2`,
       `sc2`.`point` AS `score2`
FROM   `game` `g`
       INNER JOIN `sesion` AS `s`
               ON `g`.`sesion_id` = `s`.`sesion_id`
       INNER JOIN `place` AS `pl`
               ON `s`.`place_id` = `pl`.`place_id`
       INNER JOIN `type` AS `t`
               ON `g`.`type_id` = `t`.`type_id`
       INNER JOIN `player` AS `p1`
               ON `g`.`f_player_id` = `p1`.`player_id`
       INNER JOIN `score` AS `sc1`
               ON `g`.`game_id` = `sc1`.`games_id`
                  AND `g`.`f_player_id` = `sc1`.`player_id`
       INNER JOIN `player` AS `p2`
               ON `g`.`s_player_id` = `p2`.`player_id`
       INNER JOIN `score` AS `sc2`
               ON `g`.`game_id` = `sc2`.`games_id`
                  AND `g`.`s_player_id` = `sc2`.`player_id`
ORDER  BY `s`.`date`,
          `pl`.`placename`,
          `t`.`typezkr`
Foizo
Profil
jasně... díky moc

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: