Avatar billede Asger Carlsen Nybegynder
09. september 2012 - 17:48 Der er 8 kommentarer og
1 løsning

Specifik søgekriterie (WHERE ='') der returnerer alle rækker

Et lidt omvendt spørgsmål, men findes et tegn eller udtryk der for WHERE virker som *'en i en almindelig forespørgsel. (select * from ...)?

Sagen er den jeg skal bruge den til at lave en liste fra en medlems database. Her kan brugeren vælge flere kriterier, er et kriterie ikke valgt, skal der ikke sorteres på baggrund af det kriterie. Den skal altså bare udgå fra SQL-forespørgslen. Hvis der er nogen der sidder inde med en smartere måde at gøre dette på, er det mere end velkommen.
Avatar billede olsensweb.dk Ekspert
09. september 2012 - 18:00 #1
Her kan brugeren vælge flere kriterier, er et kriterie ikke valgt, skal der ikke sorteres på baggrund af det kriterie
kunne du ikke ligge de selected kriterier i et array, og anvende IN til din søgning

http://stackoverflow.com/questions/907806/php-mysql-using-an-array-in-where-clause
Avatar billede Asger Carlsen Nybegynder
09. september 2012 - 18:10 #2
Muligvis. Er ikke den store bruger af IN. For at benytte IN, skal jeg så ikke kende de enkelte ID's på forhånd?

Jeg har fx. 3 kriterier "hold", "aar", og "kon" (køn). Jeg kan ikke lige se hvordan jeg skal bruge IN, hvis jeg gerne vil søge med fx. aar="2012" AND kon="mand"


altså

select * from medlemmer where aar="2012" AND kon="mand"
Avatar billede Asger Carlsen Nybegynder
09. september 2012 - 18:12 #3
Så drømmer lidt om en funktion:

select * from medlemmer where aar="2012" AND kon="mand" AND hold= ALLE
Avatar billede mediman Nybegynder
09. september 2012 - 19:07 #4
select * from medlemmer where aar="2012" AND kon="mand" AND hold!= ""
09. september 2012 - 19:13 #5
Du siger, tror jeg, at hvis brugeren vælger 2012, så skal der søges på det år, SELECT * FROM medlemmer WHERE aar = "2012".  Hvis brugeren ikke vælger et år, så skal der søges på alle år, og du drømmer om SELECT * FROM medlemmer WHERE aar = *
Den kender jeg ikke.  Men du er formodenlig klar over at SELECT * FROM medlemmer WHERE 1 giver dig alle rækker.  Jeg testede lige at SELECT * FROM medlemmer WHERE 1 AND aar = "2012" virker, du får alle rækker med år 2012.

Jeg kunne forestille mig, i applikationen (for eksempel i php), at opbygge en sql streng med WHERE = 1 og så for hver kriterium hvor brugeren gør et valg, for eksempel aar, tilføje " AND aar = ". $_POST['aar']

såsom (ikke testet):

$where = "";
if($_POST['aar']) $where .= " AND aar = " . $_POST['aar'];
if($_POST['kon']) $where .= " AND kon = " . $_POST['kon'];
o.s.v.
$sql = "SELECT * FROM medlemmer WHERE 1 $where";
Avatar billede mediman Nybegynder
09. september 2012 - 19:11 #6
Læste lige på lektien - du skal bruge IS NOT NULL operatoren

select * from medlemmer where aar="2012" AND kon="mand" AND hold IS NOT NULL
Avatar billede Asger Carlsen Nybegynder
09. september 2012 - 20:07 #7
Christian /> Det var lige det jeg var på jagt efter!! "WHERE 1" Har fået fyldt de enkelte kriterier på, det gik bare ged i den, når første kriterie ikke blev valgt.

Du skal have stor tak! Har været en kende frustreret over hvordan jeg kom udenom WHERE. Smid et svar så får du point.
09. september 2012 - 20:19 #8
Jamen det er godt det virker.
Avatar billede arne_v Ekspert
10. september 2012 - 01:37 #9
En ofte anvendt konstruktion er:

... WHERE ... felt = IFNULL(?, felt)

og hvis man vil have alle, saa saetter man bare parameteren til null.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester