Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: haku IN-ehdolla ei toimi

Sivun loppuun

Toitsu [12.09.2012 14:49:46]

#

hakuniei ota toimiakseen, ilmeisesti tuon IN jälkeen ei voi käyttää pakottavia hakurutineeja? Jotain väärin kuitenkin...

SELECT * FROM taulu WHERE vari IN ('punainen', 'sininen', 'keltainen', 'vihreä') AND malli = 'pyöreä' AND hinta = 'halpa' AND postitus = 'ilmainen'

Eli tarkoitus on hakea kaikki rivit taulusta, jossa vari on joko punainen, sininen, keltainen tai vihreä ja malli on pyöreä, hinta halpa ja postitus ilmainen...

Tämä palauttaa tyhjän haun vaikka noihin osuvia kamoja löytyy. Jos lyhennän hakua pelkkään tähän:

SELECT * FROM taulu WHERE vari IN ('punainen', 'sininen', 'keltainen', 'vihreä')

niin toimii. Miten järjestän vai tarvinko muiita sql funktioita että saan haluamani haettua?

EDIT Copy/paste fiba.. Nyt on jotain järkeä ongelmassa.

Metabolix [12.09.2012 14:51:42]

#

Laittamasi kyselyt ovat (edit: olivat vielä äsken) täsmälleen identtiset, joten olisi aika outoa, jos toinen toimisi ja toinen ei. Tuo kysely myös näyttää ihan oikealta. IN-vertailu ei myöskään rajoita kyselyn rakennetta mitenkään, vaan sitä voi käyttää kaikissa kohdissa, joissa voisi käyttää myös esim. =-vertailua.

Toitsu [12.09.2012 14:58:24]

#

Lisätään nyt vielä että

SELECT * FROM taulu WHERE malli = 'pyöreä' AND hinta = 'halpa' AND postitus = 'ilmainen'

Toimii myös mutta tuo ensimmäinen esimerkki ei toimi. Eli jaettuna se kahteen erilliseen kyselyyn kaikki toimii.

Metabolix [12.09.2012 17:21:09]

#

Kyllä virheen täytyy olla jossain muualla, koska kysely on ihan kelvollinen, kuten jo sanoin.

Oletko varma, että taulussa on oikeanlainen rivi? Entä millä tavalla tämä "palauttaa tyhjän haun" – tuleeko tosiaan tyhjä tulosjoukko (rivimäärä nolla) vai tapahtuuko haussa virhe (rajapinnasta riippuen tuloksena esim. FALSE tai NULL)? Saatko vastaavan haun toimimaan, jos vaihdat IN-ehdon tilalle vaikka vari = 'punainen'?

Toitsu [12.09.2012 18:12:40]

#

Eli toimii jos vari = 'punainen' ei toimi jos vari = 'vihreä'. Tähän sain homman jäljitettyä ja heivaamalla ääkköset pois sain koko homman toimimaan. Ihmettelen sitä että toisinaan ääkkösiä sisältävä toimi suoraan tuolla IN -vertailulla ja toisinaan ei. Sen sijaan = toimi myös ääkkösten kanssa joka kerta. Kanta on utf-8 samoin kuin php sivutkin. Luulisi toimivan ääkkösten kanssa suoraan mutta selvästi sössin homman kuitenkin jotenkin jossain. Surkeasti jäljitetty fixi mutta nyt kuitenkin toimii.

Teuro [12.09.2012 19:45:27]

#

Onhan yhteys myös utf-8, vai joku muu?

qeijo [13.09.2012 15:05:28]

#

Laita kaikki ominaisuudet esim. nyt värit omiin tauluihin ja viittaa niihin värin omalla id:llä, joka on muuten tietysti kasvava.

Grez [13.09.2012 17:46:27]

#

Toitsu kirjoitti:

Ihmettelen sitä että toisinaan ääkkösiä sisältävä toimi suoraan tuolla IN -vertailulla ja toisinaan ei.

Tämä asia ei nyt selvästikään liity INiin millään tavalla. Saat tasan saman lopputuloksen kirjoitatko

vari IN ('punainen', 'vihreä')
vai
(vari='punainen' OR vari='vihreä')

Eli jos välillä toimii ja välillä ei toimi, niin johtuu muusta kuin INistä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta