Terve.
Olen tehnyt komentorivipohjaisen sovelluksen, missä käyttäjä voi antaa arvoja parametrien mukaan (-d, -i, -n, -s, -t jne)
Esimerkiksi komento:
-d 10.02.2006 11.02 2006 -n=Jussi -i=23
Vie muuttujiin arvot:
$ika = 23 $nimi = Jussi $alkupaiva[0] = 10.02.2006 $loppupaiva[1] =11.02 2006
Nyt tarvitsisin vähän viisautta kehiin.
Eli miten voin muodostaa annetuista tiedoista SQL-lauseen?
Ongelma on se, että käyttäjä ei aina anna kaikkia parametrejä, vaan vaikkapa pelkästään iän -i 23
Alku minulla on seuraavasti
$lause ="SELECT *FROM taulu WHERE "; if (nimi ne "") { $lause .= "nimi = '$nimi' AND "; } if (ika ne "") { $lause .= "ika = '$ika' "; } print $lause; # SELECT *FROM taulu WHERE nimi='Jaska' AND ika ='23'
Esimerkiksi tässähän ongelma on se, että jos käyttäjä antaa pelkän nimen, niin lauseesta tulee
SELECT *FROM taulu WHERE name='Jussi' AND
Käyttäjä voi kuitenkin antaa jopa 9 eri arvoa, joten tarvitsisin tähän jonkin joustavan ratkaisun.
Olisin enemmän kuin kiitollinen, jos joku osaisi neuvoa.
Itse käyttäisin boolean muuttujaan, joka saisi true-arvonsa ensimmäisen lisätyn ehdon myötä. Ja jos muuttuja on tosi ja lisätään toinen ehto, niin silloin lisätään tuo " And " väliin.
$ehtoja = false; if (nimi ne "") { $lause .= "nimi = '$nimi'"; $ehtoja = true; } if (ika ne "") { if ($ehtoja) { $lause .= " AND " } $lause .= "ika = '$ika'"; $ehtoja = true; } print $lause; # SELECT *FROM taulu WHERE nimi='Jaska' AND ika ='23'
PS: Alue taisi olla hieman väärä tälle kysymykselle, sillä PHP:ksi tuon kielen ainakin tunnistin... =) (mod. korjasi)
Kielen näköjään pitäisikin olla Perl:ä, jolla ei ole true/false-muuttujia lainkaan, vaan >0/0... Käsität tuosta kuitenkin mitä tarkoitan.
PS: Aluetta saa taas muuttaa...=)
Laita peruskyselyksi SELECT * FROM taulu WHERE 1=1
Tämän jälkeen voit laittaa muiden ehtojen alkuun aina AND
Ok. Kiitos paljon neuvoista !
Aihe on jo aika vanha, joten et voi enää vastata siihen.