Autor | Zpráva | ||
---|---|---|---|
scooti Profil * |
#1 · Zasláno: 18. 8. 2013, 09:22:20
Zdravim,
chcem vas poprosit o pomoc s vytvorenim selectu pre dve tabulky .. tabulka 1 - su v nej udaje o cenovych hladinach id - nazov a v druhej tabulke (id, id_c_hladina, cena,) su ceny pre napr stol pre kazdu cenovu hladinu, ale tabulka uchovava kazdu zmenu ceny, cize zaznamy pre napriklad prvu cenovu hladinu mozu byt 5 a pre cenovu hladinu 2 iba jedna. Teraz to mam riesene v php takto: SELECT id, nazov from c_hladina order by nazov a nasladne cez cyklus foreach robim pre kazdu cenovu hladinu dalsi select SELECT cena from stol where c_hladina=$c_hladina[id] order by id DESC limit 1 je mozne tento select urobit v jednom kroku a nejak to zlúčiť do jedného Selectu? Tabulky mam poprepajane a snazil som sa v nich urobit vazby, ale pri vyberoch zlyhavam. Dakujem velmi pekne |
||
Sir Tom Profil |
#2 · Zasláno: 18. 8. 2013, 09:34:25
scooti:
Zkus: SELECT t1.id, t1.nazov, t2.id, MAX(t2.cena) FROM c_hladina t1 JOIN stol t2 on t1.id = t2.id_c_hladina GROUP BY t1.id, t1.nazov, t2.id |
||
scooti Profil * |
#3 · Zasláno: 18. 8. 2013, 11:13:05
Sir Tom:
Vdaka, ale nefunguje to.. v tabulkach mam napr. taketo udaje: c_hladina id | meno --------------------- 1 | prvá 2 | druhá 3 | tretia stol id | id_c_hladina | cena --------------------- 1 | 1 | 0.23 2 | 1 | 0.25 3 | 1 | 0.27 4 | 2 | 0.23 5 | 2 | 0.33 6 | 3 | 0.29 a ja by som potreboval takyto vystup id | id_stola | cena --------------------- 1 | 3 | 0.27 2 | 5 | 0.33 3 | 6 | 0.29 |
||
juriad Profil |
#4 · Zasláno: 18. 8. 2013, 11:36:38
scooti:
Musíš použít poddotaz. Inspiruj se Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou |
||
Sir Tom Profil |
#5 · Zasláno: 18. 8. 2013, 13:17:01
scooti:
Jo sorry, nelze groupovat dle sloupečku id v tabulce stol. Je třeba groupovat jenom podle tabulky cenova_hladina SELECT t1.id, t1.nazov, t2.id, MAX(t2.cena) FROM c_hladina t1 JOIN stol t2 on t1.id = t2.id_c_hladina GROUP BY t1.id, t1.nazov |
||
Kajman Profil |
#6 · Zasláno: 18. 8. 2013, 15:12:00
V původním řešením se hledá maximum na sloupečku id - tedy poslední záznam, ne maximální cena. Na potvoru to v ukázkových datech není poznat, kdy obě varianty vrací to stejné. Zkusil bych něco jako
SELECT s.id_c_hladina id, s.id id_stola, s.cena FROM (SELECT Max(id) id FROM stol GROUP BY id_c_hladina) m JOIN stol s ON m.id = s.id |
||
Sir Tom Profil |
Kajman:
„původním řešením se hledá maximum na sloupečku id“ Myslím, že se scooti upsal, a že hledá největší cenu v konkrétní hladině. Ale klidně může hledat i poslední zadanou cenu v dané hladině. Resp. za platné podmínky, že větší id = větší cena (protože ceny se s postupem času zpravidla zvětšují), se dá použít, že se hledá maximální id a tím pádem i poslední zadaná cena v dané hladině je cena největší. |
||
scooti Profil * |
#8 · Zasláno: 18. 8. 2013, 21:22:59
Dakujem vsetkym za rady, velmi si to cenim.. uz len to spravne pochopit.. Mam uz dve knihy o mysql ale stale to nie a nie pochopit.. tie zlozitejsie select-i mi robia problemy. Je ale pravda ze som zatial nenasiel nejaku knihu kde by bo bolo hlbsie vysvetlene.
co sa tyka zadania, tak vzdy potrebujem vybrat poslednu hodnotu, cize posledne id zadane pre konkretnu cenovu hladinu, nie najvyssiu. Kedze ceny mozu aj klesat (ano, stava sa aj to :-) ) Este raz ale velmi pekne dakujem |
||
Časová prodleva: 12 let
|
0