1 (edited by Ajaks 2011-01-02 17:48:20)

Topic: SQL filtravimas su keliom reiksmem

Laba diena ekspertams,

kazkoks kvailas bug'as i galva ilindo, nesuprantu kas per nesamone gaunasi.

Yra paprasta lentele, joje viename stulpelyje yra ivairus rezultatai. As noriu kad man atfiltruotu ta lentele jeigu tame stulpelyje yra kelios nurodytos reiksmes, o jeigu bent vienos nurodytos nera, tada rezultatas butu nulinis?

pvz

ID - Preke
1 - PrekeA
2 - PrekeB
3 - PrekeC

Jeigu as parenku SELECT * FROM `table` WHERE Preke IN ('PrekeA', 'PrekeC')

tada viskas puiku, bet jeigu as parenku:

SELECT * FROM `table` WHERE Preke IN ('PrekeA', 'PrekeC', 'PrekeZ')

tada man ismete PrekeA ir PrekeC. BET as noriu kad neismestu nieko visai.


IN veikia su 'OR' salyga, sita zinau. Bet kaip padaryti kad veiktu su AND salyga?

Re: SQL filtravimas su keliom reiksmem

IN() operatorius pasako ar reikšmė yra toje aibėje ar nėra. Tavo atveju tikrinimas vykdomas kiekvienai eilutės reikšmei.

Taigi tu naudoji IN() operatorių ne pagal paskirtį.

Re: SQL filtravimas su keliom reiksmem

Ajaks wrote:

As noriu kad man atfiltruotu ta lentele jeigu tame stulpelyje yra kelios nurodytos reiksmes, o jeigu ju VISU nera, tada rezultatas butu nulinis

tada man ismete PrekeA ir PrekeC. BET as noriu kad neismestu nieko visai.

Iš pradžių rašai, kad nori, jog rezultatas būtų nulinis jeigu nėra VISų įrašų, o paskui rašai, kad rezultatas turi būti nulinis, jeigu nėra BENT VIENO įrašo.

Tavo atveju arba reikia keisti duomenų schemą, kad lengvai kažką išgauti arba skaičiuoti surastus elementus, ir jeigu kiekis neatitinka paduoto masyvo elementų skaičiui tada ten atlikti ar neatlikti sekančius veiksmus.

Re: SQL filtravimas su keliom reiksmem

Turiu omeny kad jeigu nera bent vieno, tada rezultatas butu nulinis.
(Jeigu nera VISU tai zinoma irgi rezultatas turi buti nulinis.)

Jeigu IN naudociau pagal paskirti tai problemos nebutu, todel man ir idomu kaip cia taip SQL'as nepagalvojo apie toki elementaru dalyka :)
Kaip suprantu built-in funkcijos paciame SQL'e nera kuri leistu nurodyti konkrecias reiksmes kurios VISOS turi atitikti ir jeigu bent viena neatitinka tada rezultato nera...?

Re: SQL filtravimas su keliom reiksmem

Turi ieškoti, gal ir yra:
http://dev.mysql.com/doc/refman/5.5/en/ … eries.html
http://dev.mysql.com/doc/refman/5.5/en/ … eries.html
http://dev.mysql.com/doc/refman/5.5/en/ … eries.html

O jeigu nerasi, tai visada yra galimybės išspręsti dar kitais būdais. Arba tiesiog tu problemą sprendi ne tiesiausiu keliu.