Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 2 lety

weckho
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 101

Pomoc se složením SQL dotazu

Ahoj,

potřeboval bych poradit se složením SQL dotazu. Mám dvě tabulky, v jedné mám názvy kurzů, v druhé datumy (ke každému kurzu je několik datumů). A potřebuji na stránku vypsat vždy název kurzu + všechny datumy, kdy se kurz koná. Nevím si rady s tím, jak to všechno vytáhnout z DB v jednom dotazu.

Děkuji za každou radu.

 

#2 před 2 lety

Ondřej Brejla
dibi guru
Registrovaný: 20. 4. 2008
Příspěvky: 694

Re: Pomoc se složením SQL dotazu

Když sem vypíšeš všechny sloupce obou tabulek, tak ti dotaz napíšem, takhle těžko ;-)

SELECT nazev_kurzu, datum_kurzu FROM nazvy_kurzu JOIN data_kurzu USING id_kurzu

Přibližně takhle nějak ;-)

 

#3 před 2 lety

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Re: Pomoc se složením SQL dotazu

Já bych použil ještě GROUP BY na kurzy a pak si ty ztracené datumy vytáhnul přes GROUP_CONCAT :)

 

#4 před 2 lety

Ondřej Brejla
dibi guru
Registrovaný: 20. 4. 2008
Příspěvky: 694

Re: Pomoc se složením SQL dotazu

Ano, grupování a concatování je určitě přesně to, co potřebuje člověk, který netuší, jak udělat obyč join ;-)

Ale proč ne :-D

 

#5 před 2 lety

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Re: Pomoc se složením SQL dotazu

Asi jsem ho hodil do ledový a hluboký vody, ale v týhle podobě to z databáze dostane v nejpohodlnější podobě :)

 

#6 před 2 lety

Ondřej Brejla
dibi guru
Registrovaný: 20. 4. 2008
Příspěvky: 694

Re: Pomoc se složením SQL dotazu

To je otázka vkusu, potřeby a aktuálního rozpoložení programátora :-D

 

#7 před 2 lety

weckho
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 101

Re: Pomoc se složením SQL dotazu

Pár dnů jsem se k tomu nedostal, ale vídím, že thread žije sám i beze mě :)

Potřebuji to jinou syntaxí, můj (neúspěšný) pokus byl:

return $this->db->select('%n.*, %n AS `popisek`', $this->kurzy, $this->datumy . '.popisek')

                ->from($this->kurzy)

                ->leftJoin($this->datumy)

                ->on('%n = %n', $this->kurzy . '.id', $this->datumy . '.id_kurzu')

                ->groupBy($this->kurzy . '.id');

Přičemž $this->kurzy a $this->datumy jsou názvy tabulek. Jinak struktura obou tabulek je následující:
Kurzy – sloupce id, nazev
Datumy – sloupce id, id_kurzu, popisek, datum

A jak jsem psal výše, potřeboval bych vytáhnout všechny kurzy a ke každému z nich datumy, ve které se koná (k jednomu kurzu je vždy 0 – x datumů).

Díky moc!

 

#8 před 2 lety

vlki
dibi guru
Registrovaný: 30. 6. 2008
Příspěvky: 239

Re: Pomoc se složením SQL dotazu

Hm, budeš potřebovat agregační funkce, abys získal všechny datumy a ne jen jeden.

$courses = dibi::select('[c].*, GROUP_CONCAT([d.popisek] SEPARATOR \', \') AS [datumy]')
               ->from($this->kurzy)->as('c')
               ->leftJoin($this->datumy)->as('d')
               ->on('[c.id] = [d.id_kurzu]')
               ->groupBy('[c.id]');

Netestováno, ale mělo by vrátit jako sloupec datumy řetězec obsahující všechny popisky datumů oddělené čárkou a mezerou.

 

Zápatí