Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: SQL-lauseen muodostus

javerkki [20.09.2006 23:32:58]

#

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.

BadSource [21.09.2006 06:59:13]

#

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)

BadSource [21.09.2006 09:06:42]

#

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...=)

Hycke [21.09.2006 09:36:25]

#

Laita peruskyselyksi SELECT * FROM taulu WHERE 1=1
Tämän jälkeen voit laittaa muiden ehtojen alkuun aina AND

javerkki [21.09.2006 12:23:13]

#

Ok. Kiitos paljon neuvoista !

Vastaus

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

Tietoa sivustosta