[SQL] dotaz na výpis dat

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Dupl3xx 25. 6. 2014 17:51

Ahoj, mám 2 tabulky, z kterých vypisuju data. vypisuju minimum u daného objektu. nyni mam problem, ze mi to vypise radek kde je minimum je ale na jinem radku a to tam nemuzu dostat.
Vim ze je problem v tom group by

Měl by někdo chvilku a podíval by se na to?

Kód: Vybrat vše
select chata.chata_id, min(rezervace.cena), min(rezervace.sleva) from rezervace inner join chata on chata.chata_id = rezervace.chata_id where chata.chata_id=>0 group by rezervace.chata_id having count(rezervace.chata_id)>0 order by LEAST(min(rezervace.cena),min(rezervace.sleva));


//uprava
Naposledy upravil Dupl3xx dne 26. 6. 2014 10:58, celkově upraveno 2
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod pucmeloudek 26. 6. 2014 09:20

zkus znova, konzistentne a take cesky. pripadne sem hod vzorova data a potrebny vystup. (tvoje heslo "vypisuju maximum" totiz zcela zrejme je v rozporu s dotazem, ktery ani naznak nejakeho maxima neobsahuje, vidim pouze min(). tez vystrik "mi to vypise radek kde je maximum a minimum je ale na jinem radku a to tam nemuzu dostat." je znacne perloidni.
pucmeloudek
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 11:09

Napsal jsem to zmatene.
mam 2 taulky (prikladam vyrez)
rezervace
Obrázek
chata
Obrázek

a me jde o to, abych vypsal pod sebe chaty podle ceny nebo slevy (podle toho tera bude menci)

takle u chaty 1330 to vypise

Kód: Vybrat vše
1330 8 5 (sleva musí být  vyšší než 0)

bude následovat další chata, kde to zase spočte minimum u ceny a u slevy a bude druha nejlevnější atd...
tu tabulku rezervace jsem ukazál u jedné chaty, u ostatních chat je to podobně
PS: to maximum jsem tam napsal omylem
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod MatesX64 26. 6. 2014 12:00

SELECT chata_id, cena - sleva AS VyslednaCena FROM rezervace INNER JOIN chata ON rezervace.chata_id = chata.chata_id ORDER BY VyslednaCena

Neco takoveho nestaci?
MatesX64
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 12:19

ještě jsem satne napsal to, že cena i sleva je celá částka, to znamená ze stojí chata 1330 stojí celkem nejlevněji 5
není to sleva ktera se odecte ale konecna castka, coz znamená ze ja hledám nejlevnejsi cenu dané chaty, která u ní je
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod lobotom007 26. 6. 2014 12:37

Pak máš zkrátka špatně navrženou strukturu dat. pokud je oboje celá částka, pak máš mít sloupec cena a např. sloupec slevněno. Zbytečně to zabírá místo, pokud je v obou stejná hodnota

Jinak můžeš využít krásně pomalou funkci if

SELECT IF(cena < sleva, cena, sleva) as vysledna FROM ... ORDER BY vysledna
lobotom007
Kolemjdoucí

Odeslat příspěvekod Dupl3xx 26. 6. 2014 12:41

no jo, ale tak todle bude porovnávat cena<sleva na daném řádku ne?,
já potřebuju aby to vzalo nejmensi z cena, nejmenší ze sleva a porovnalo a vypsalo
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod pucmeloudek 26. 6. 2014 12:49

napis sem prosimte jeste jednou pozadovany vysledek a co ten tvuj dotaz dela spatne.
vyrok
"takle u chaty 1330 to vypise"
znamena, ze to vypise, ale nelibi se ti to, nebo naopak tohle chces vypsat???
pucmeloudek
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 13:13

to ma vypsat 1330 8 5, coz mi nevypisuje.

ja mam problem vtom, ze potrebuju aby to nebralo u slevy 0,
jenze kdyz tam dam rezervace.sleva > 0, tak to nevezme celej radek a pokud se stane, ze zrova cena v radku, kde je sleva 0 je nejmenci, tak to nefunguje

Kód: Vybrat vše
select chata.chata_id, min(rezervace.cena), min(rezervace.sleva) from rezervace inner join chata on chata.chata_id = rezervace.chata_id where rezervace.cena > 0 and rezervace.sleva > 0 group by rezervace.chata_id having count(rezervace.chata_id)>0 order by LEAST(min(rezervace.cena),min(rezervace.sleva));



tady vznikne problem
Obrázek

vypíše to 1330 8 8 ale melo by to byt 1330 5 8
Naposledy upravil Dupl3xx dne 26. 6. 2014 13:46, celkově upraveno 1
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod MatesX64 26. 6. 2014 13:36

Udělej tedy UNION

Kód: Vybrat vše
SELECT cena AS Vysl FROM chata join..... WHERE sleva = 0
UNION
SELECT sleva AS Vysl FROM chata join..... WHERE sleva > 0
ORDER BY Vysl

Prvni select ti da ty ktere nemaji slevu
Druhy ti da ty se slevou
A seradim to a mam jednoduchy rychly dotaz 8-)
Naposledy upravil MatesX64 dne 26. 6. 2014 13:37, celkově upraveno 1
MatesX64
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 13:37

eh, todle uz je na me moc. vypsal by jsi mi prosim celej ten prikaz? moc dekuju
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod MatesX64 26. 6. 2014 13:40

Ok tak nejak takhle

Kód: Vybrat vše
SELECT chata_id, cena AS VyslednaCena FROM rezervace INNER JOIN chata ON rezervace.chata_id = chata.chata_id WHERE sleva = 0
UNION
SELECT chata_id, sleva AS VyslednaCena FROM rezervace INNER JOIN chata ON rezervace.chata_id = chata.chata_id WHERE sleva > 0
ORDER BY VyslednaCena
MatesX64
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 13:46

ne to nevypise pouze jeden radek u dane chaty ale treba u ty 1330 tu mam 3 a pak hlavne ja potrebuju i ty ostatni data chata.chata_id, min(rezervace.cena), min(rezervace.sleva)

ten muj prikaz je dobrej, jen tam haprujou ty nuly
Dupl3xx
Junior
Uživatelský avatar

Odeslat příspěvekod MatesX64 26. 6. 2014 13:52

Kód: Vybrat vše
SELECT rezervace.chata_id, cena AS VyslednaCena FROM rezervace INNER JOIN chata ON rezervace.chata_id = chata.chata_id WHERE sleva = 0
UNION
SELECT rezervace.chata_id, sleva AS VyslednaCena FROM rezervace INNER JOIN chata ON rezervace.chata_id = chata.chata_id WHERE sleva > 0
ORDER BY VyslednaCena


Tohle je funkční verze toto co jsem si myslel že chceš když chces ostatní data tak je tam jednoduše přidej (do obou selectů)

Ideálně specifikuj přesně co chceš aby dotaz vracel :shock:
MatesX64
Junior

Odeslat příspěvekod Dupl3xx 26. 6. 2014 14:01

treba tu chatu 1330 my vypise a ma vypsat 1330 5

| 1330 | 0 |
| 1330 | 5 |
| 1330 | 8 |
| 1330 | 10 |
| 1330 | 11 |
| 1330 | 15 |
| 1330 | 16 |
| 1330 | 17 |
| 1330 | 18 |
| 1330 | 19 |
| 1330 | 20 |
| 1330 | 21 |
| 1330 | 22 |
| 1330 | 23 |
Dupl3xx
Junior
Uživatelský avatar

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků