Diskuze: MYSQL one to many v jednom dotazu

PHP PHP MYSQL one to many v jednom dotazu American English version English version

Avatar
jiri.bakes
Člen
Avatar
jiri.bakes:

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. května 11:07
Avatar
Vlado Cukalovsky:

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. května 14:42
Avatar
Odpovídá na jiri.bakes
Martin Konečný (pavelco1998):

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 3. května 14:45
Avatar
Odpovídá na jiri.bakes
Michal Štěpánek:

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. května 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.:

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. května 23:44
Avatar
jiri.bakes
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
jiri.bakes:

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. května 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.