NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!

Diskuze: MYSQL one to many v jednom dotazu

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
jiri.bakes
Člen
Avatar
jiri.bakes:3.5.2016 11:07

Zdravím,
potřebuji poradit.

Mám 2 tabulky. Tabulka všech vozů a tabulka všech kalkulací.
Každý vůz má 1 a více kalkulací.
Na úvodní straně potřebuji vypsat všechny vozy a k nim jejich kalkulace.

Je tohle možné udělat v jednom mysql dotazu?
Potřeboval bych vrátit něco jako:

$data = array(
   array(
      'id'=>1,
      'number' => '12345',
      'title' => 'bmw x5',
      'calculations' => array(
         array('id' => '1', 'payment' => '1000'),
         array('id' => '2', 'payment' => '2000'),
      )
   ),
   array(2. vůz, atd)
)

Nebo musím nejdříve vybrat všechny vozy a pro každý vůz poté vybrat jeho kalkulace v samostatných dotazech?

Při samostatných dotazech by to bylo při 100 vozech: 1 dotaz na výběr všech vozů, pak v loopu 100 dotazů kvůli kalkulacím.

car_table (select *)

id number title
1 12345 bmw x5
2 12346 bmw x6

calc_table (select *)

id car_id payment
1 1 1000
2 1 2000
3 2 3000
4 2 4000

Předem moc děkuji za pomoc.

S pozdravem
Jiří

 
Odpovědět
3.5.2016 11:07
Avatar
Vlado Cukalovsky:3.5.2016 14:42

Mám pocit, že to asi nepôjde. Keďže ak sa nemýlim, tak SQL nedisponujeme nejakou funkciou na pushovanie prvkov do poľa.
Skôr by som to riešil aplikačne, ako cez dotaz. Vytiahnuť skôr kalkulácie a následne ich priradiť k autám. Alebo Vybrať všetky záznamy pomocou JOINu, a zase to vyriešiť aplikačne. Nič lepšieho ma nenapáda.

 
Nahoru Odpovědět
3.5.2016 14:42
Avatar
Odpovídá na jiri.bakes
Martin Konečný (pavelco1998):3.5.2016 14:45

To neuděláš, musíš si prvně vyhledat jednu část dat a potom druhou. Nejlíp aby se ty dotazy položily nějak takhle:
http://www.notorm.com/#…

Pak to "jen" musíš v PHP postupně naházet do toho tvaru, který chceš.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.5.2016 14:45
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na jiri.bakes
Michal Štěpánek:3.5.2016 15:04

Musel bys selectovat ty kalkulace a k nim přiřazovat JOINEM jednotlivá auta, ale obráceně to nepůjde

Nahoru Odpovědět
3.5.2016 15:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
LacoS.
Člen
Avatar
LacoS.:3.5.2016 23:44

ak ti to staci na 1 riadok, tak takto: (iba sprosty zoznam)

select
 car.id as idecko_auta
 car.number as cislo,
 car.title as nazov,
 group_concat(calc.payment Separator ' ; ') as platby
from
 car_table car,
 calc_table calc
 where
 car.ID = calc.car_id
group by
 car.ID
 
Nahoru Odpovědět
3.5.2016 23:44
Avatar
jiri.bakes
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
jiri.bakes:4.5.2016 13:01

Díky za objasnění. Všem děkuji za nápady. Škoda, že nelze označit za řešení více odpovědí.

 
Nahoru Odpovědět
4.5.2016 13:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.