Jeg skal hente nogle records fra mysql databasen. Hvad der hentes afhænger af hvilke checkbokse der er afkrydset ud for henholdsvis højde og alder.
højde har 4 checkbokse (1,2,3,4) alder har 3 checkbokse (a,b,c)
Mindst én eller flere bokse under højde og alder skal være checked. Fx hvis er alle bokse checked hentes alle records Fx hvis 1,a,b er checked bliver alle records hentet hvor 1a eller 1b er findes fx hvis 1,2,a,b er checked bliver alle records hentet hvor 1a, 1b, 2a, 2b er findes. Håber i kan følge ideen ellers så spørg.
Hvordan laver man en "where" sætning som tager højde for alle kombinationer? der skal vel bruges en del AND og OR?
$sql = mysql_query("select * from boli WHERE ........);
Er de to ting delt op i hvert sit felt? For så er det bare SELECT felt1, felt2 FROM tabel WHERE height IN (1,3,4) AND alder IN ('a','c') du skal bruge (naturligvis hvor du justerer efter hvad der er valgt).
Du kan bruge implode for at omdanne fra dit array på formen (du bruger vel et array, bare med forskellige values) til at danne det der skal ryge i IN-delene.
Ud fra dit svar kan jeg se at jeg nok ikke har uddybet nok. En record kan godt have flere højder og flere aldre - fx 1,2,a,b,c i samme record.
Tabellen er bygget op således at højderne 1 , 2 , 3 , 4 og alder a , b , c har hver deres kolonne. I recorden står der "ja" hvis feltet er sandt.
Kan man ikke lave noget lignende:
$sql = mysql_query("select * from boli WHERE (1='$_GET[1]' OR 2='$_GET[2]' OR 3='$_GET[3]' OR 4='$_GET[4]') AND a='$_GET[a]' OR b='$_GET[b]' OR c='$_GET[c]');
Min array kan fx se sådan her ud: www.domæne.dk/side.php?1=ja&3=ja&b=ja
Den array skal hente records der indeholder som minimum 1=ja OG b=ja ELLER 3=ja OG b=ja
Hvis det ellers er muligt, bør du flytte de ting ud i en relationstabel så du har en række pr. record pr. værdi, samt en tabel der indeholder de mulige værdier - det er en langt bedre og mere fleksibel struktur (hvad nu hvis du skal have en alder "d"?), og det gør din SQL nemmere at læse - og så generere checkboksene dynamisk ud fra de mulige data, så de alle benytter deres værdi i value-attributten, og hver af de "grupperinger" du har, har et fælles navn der slutter på [] (så de bliver lagt i et array).
Men det kan da sagtens lade sig gøre alligevel, efter nøjagtigt det princip du selv kommer med - dog med den lille krølle at du er nødt til at bygge SQL'en op dynamisk i en string, fordi ikke-markerede checkboxes jo ikke sendes med, og du dermed ikke kan forvente at den selv kan finde ud af at sætte den rigtige værdi ind de steder der nu ikke har været et hak i.
Måden du gør det på er sådan set nem nok; du skal bare (i rækkefølge) kontrollere hvert felt for om det skal med (hvis det er sat). Der skal man så lige være opmærksom på den første/sidste man tilføjer for hver gruppe, da der jo kun skal OR ind i mellem de enkelte feltbetingelser.
Synes godt om
Ny brugerNybegynder
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.