| Prosim za pomoč pri sestavi querija (mysql) | ||
|---|---|---|
|
krenpac
20. nov 2017 00:56:18
Pridružen od: 12. jul 2017 8 objav 4 0 0 |
#1
Imam na primer spodnjo tabelo id cena kolicina datum Želel bi izpisati vnose katerih skupna količina je recimo manjša od neke vrednosti. Vnosi so recimo razvrščeni po datumu in ceni. Torej... izpiše In sedaj bi rad iz te tabele dobil podatke kjer je skupna količina manjša od recimo 0.3, torej da bi se v tem primeru izpisalo... Ima kdo idejo, kako bi to naredil? Pa če se da brez gnezdenih poizvedb (to rešitev že imam in jo ne mislim uporabiti, ker je potencialno zelo potratna) |
|
|
carli
20. nov 2017 07:10:25
Pridružen od: 5. avg 2008 1258 objav 583 54 17 |
#2
Em ... ne štekam ravno, dobiš količine kjer je količina nižja od 0.3, kaj bi rad grupiral po datumu pa seštel količine? Primer?
|
|
|
SlimDeluxe
20. nov 2017 07:21:24
Pridružen od: 29. apr 2010 1223 objav 1022 144 9 |
#3
Dvomim, da obstaja enostavna SQL-only rešitev (brez zanke in subqueryev). Freelance Web Developer
|
|
|
Vini
20. nov 2017 08:41:04
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#4
Lahko poskusiš z user variables, nekaj v stilu: Ne vidim pa uporabnosti te rešitve za karkoli, imam občutek, da nekaj delaš narobe. Kaj točno bi rad dosegel? Plus zgornja rešitev ni prav blazno optimizirana. Če imaš veliko recordov, lahko to tudi traja, ker bo query naredil sequential scan. |
|
|
Vini
20. nov 2017 08:44:07
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#5
Aha, ne, štekam zdaj, potrebuješ recorde po posameznih datumih, potem tale moja rešitev ne bo v redu. Subquery bi bil rešitev, ne vem zakaj se ga otepaš. Moraš pa seveda poskrbeti za pravilno indeksiranje. |
|
|
krenpac
20. nov 2017 13:21:27
Pridružen od: 12. jul 2017 8 objav 4 0 0 |
#6
Se opravičujem, sem se zmotil pri razvrčanju. Najprej se razvrsti po ceni, šele nato po datumu. id cena kolicina datum Želim ustvaril poizvedbo, ki bi po datumu in ceni razvrčenem seznamu (ORDER BY cena DESC, datum ASC) ob od uporabnika določenem pogoju o max. skupni zahtevani količini* (WHERE -?-), vrnila seznam ustreznih vrstic. Rešitev, ki deluje, a me skrbi, da ni optimalna, je ta... Zgornje rešitve nisem implementiral, trenutno imam urejeno tako, da najprej izvedem query brez pogoja o količini, le ob pogoju o ceni (ja, tudi cena je pogoj, a ceno in hkrati količino v isti poizvedbi ne morem (?) uporabiti, ker je trik, namreč, če je skupna vsota količin več kot od uporabnika določena vrednost, se del količine lahko tudi odvzame naslednje, sicer po merilih poizvedbe neustrezne vrstice... omb, upam, da bo kdo razumel, kaj želim povedati :) ne znam drugače razložiti, v glavnem, to poizvedbo "o tej famozni vsoti količin" bi potem uporabil izključno, da bi dobil število ustreznih vrsti + 1(!), in to vrednost bi potem uporabil kot max. LIMIT pri spodnji poizvedbi) Trenutno, po izvedbi zgornje poizvedbe ("ki je še brez LIMIT"). filtriram ustrezne vrstice iz polja zadetkov (recimo "narocila"), s PHP zanko. Ko so pogoji izpolnjeni, se zanka ustavi (break), Pri tem načinu me skrbi to, da je polje "naročila", ki ga dobim iz poizvedbe, lahko zelo veliko, ker v poizvedbi pač nisem upošteval parametra o največji dovoljeni vsoti količin. Recimo, če uporabnik za ceno vpiše 0, potem bodo ustrezni čisto vsi zapisi v bazi, pa čeprav bi bila količina recimo le 0.1 in bi dejansko bil ustrezen le 1. zapis. Torej trenutno imam na pladnju 2 rešitvi, prva je ta s potecialno zelo velikim poljem (RAM) ali gnezdeno poizvedbo, ki bi pa potencialno lahko izvedla ogromno podquerijev, če bi na primer bile ustrezne količine v bazi majhne (recimo 0.00001), od uporabnika določena količina pa bi bila npr., ne vem, 100, potem bi bilo teh delnih vsot (in s tem podquerijev), predno bi se vse skupaj zaključilo ogromno. Sicer bom tako vse potestiral, ko pride to na vrsto (s par milijoni dummy zapisov & explain) ampak me vseeno zanima, če se da ta delna vsota količin nekako elegantneje rešiti, ker ta rešitev mislim, da ni optimalna, ali pa mogoče, da se da vse zapisati celo z enim querijem (+1 dodatni "neustrezni" vnos). |
|