Autor Zpráva
scooti
Profil *
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
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 *
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
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
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
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 *
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: