Fórum Root.cz
Hlavní témata => Server => Téma založeno: Phaal 23. 09. 2011, 20:03:47
-
Zdravím
Řeším problém v MySQL, mám tabulky:
objednavka:
id_objednavky | | adresa_atd |
1 | | adr1 |
2 | | adr2 |
3 | | adr3 |
4 | | adr4 |
polozka:
id_objednavky | | polozka |
1 | | CCC |
2 | | AAA |
2 | | DDD |
3 | | BBB |
4 | | DDD |
4 | | AAA |
4 | | CCC |
a potrebuji vytvorit neco takoveho:
id_objednavky | | polozka | | adresa_atd |
2 | | AAA | | adr2 |
2 | | DDD | | adr2 |
4 | | AAA | | adr4 |
4 | | CCC | | adr4 |
4 | | DDD | | adr4 |
3 | | BBB | | adr3 |
1 | | CCC | | adr1 |
Tedy, chtel bych udělat setřízený select tak, abych třídil podle 'polozka' ale zároven měl stejné 'id_objednavky' pod sebou.
Teoreticky něco takového, že si tabulky joinnu
- udělám si skupinky podle 'id_objednavky'
- uvnitř tyto skupinky třídím podle 'polozka'
- a skupinky pak za sebou setřídím podle polozky ktera je na prvním místě.
Šlo by něco takového spáchat nějakým dobře sestaveným dotazem? Abych docílil takového výsledku?
Samozřejmě je mi jasné že bych to mohl řešit v ORM stylu nějakým tím dočítáním, ale více by se mi hodilo kdybych to mohl udělat přímo v SQL.
Předem děkuji za jakékoliv návrhy a rady.
-
ORDER BY id_objednavky, polozka
-
No, pokud pouziji:
SELECT p.id_objednavky, p.polozka, o.adresa
FROM objednavka o
LEFT JOIN polozka p ON ( o.id_objednavky = p.id_objednavky )
ORDER BY p.id_objednavky, p.polozka
Tak se mi tabulka seradi takto:
1 CCC adr1
2 AAA adr2
2 DDD adr2
3 BBB adr3
4 AAA adr4
4 CCC adr4
4 DDD adr4
Coz bohuzel neni tak jak bych potreboval.
Tabulka by musela zacinat zaznamem 2 AAA nebo 4 AAA a pokracovat podle pravidel které jsem popsal v prvním postu.
-
najprv zoradit objednavky podla najmensej polozky a potom doplnit vsetky polozky ...
SELECT *
FROM (
SELECT objednavka.*
FROM objednavka
JOIN polozka
USING (id_objednavky)
GROUP BY id_objednavky
ORDER BY MIN(polozka), id_objednavky) AS obj
LEFT JOIN (
SELECT * FROM polozka
ORDER BY polozka) AS pol
USING (id_objednavky)
Akurat poradie vyslednych stlpcov je trosku ine ;-)
-
Perfektní, přesně takhle jsem to potřeboval.
Díky moc deadmail!