apachenerd Skrevet 17. juni 2004 Del Skrevet 17. juni 2004 Jeg lager en side i php mot mysql og har kommet til spørringer. I tabellen har jeg 11 rader som jeg skal kjøre spørringer mot. Ønske mitt er at jeg har en form der man fyller ut/velger fra en "drop down" liste. Dersom man ikke har skrevet inn noe, vil mysql ikke "bry seg om" å søke i de feltene. Hvis man fyller inn f.eks. 4 felter, søker den i alle fire med AND. Hvordan skal jeg få til dette enkelst mulig? En lang spørring på et vis, eller dele dette opp i flere script? Takker for hjelp! Lenke til kommentar
Nervetattoo Skrevet 17. juni 2004 Del Skrevet 17. juni 2004 Litt vanskelig å svare på med så lite informasjon. Hva er det som skal være i denne drop down listen, osv. Som et generelt tips tror jeg jeg ville hatt 4 funksjoner, en for hver, for så å kalle opp rett funksjon i forhold til input. Lenke til kommentar
Kirikiri Skrevet 17. juni 2004 Del Skrevet 17. juni 2004 Ikke sikker på om du kan gjøre dette i mySQL, men i MS SQL server 2000 kan du lage et dynamisk statement, ved å lage en SQL-query som en varchar-streng, og så eksekvere denne. declare @SQL varchar(8000) set @SQL = 'select * from tblWhatever where 1=1 ' Skal du søke etter det samme ordet i de forskjellige kolonnene? I så fall kan du lage en lang streng av hvilke kolonner du vil søke i, og så lage et statement ut fra det, feks. @searchstring varchar(100) -> kolonnene du søker i @searchvalue varchar(30) -> det du søker etter For hver mulige kolonne setter du opp en query mot @searchstring, dvs finnes kolonnennavnet i @searchstring? Hvis det gjør det, setter du opp set @SQL = @SQL + ' and [kolonnenavnet] = ' + @searchvalue og til slutt eksevkerer du med exec(@SQL) Så hvis du har mulighet til det i mySQL, prøv å eksepriementere med dynamisk SQL. Da kan du legge inn en haug med if-tester etc. for å få forskjellig statement for hver gang. Kirikiri Lenke til kommentar
apachenerd Skrevet 17. juni 2004 Forfatter Del Skrevet 17. juni 2004 Skal forsøke å forklare bedre: Jeg har en tabell med 12 rader som jeg skal kjøre spørringer mot. Denne inneholder diverse info som brukere legger inn. Så skal jeg lage en spørringsside som gjør at brukerene kan hente ut informasjon. Man skal kunne søke i tabellen med så mange verdier man vil, av de i alt 12 verdiene. F.eks: Felt 1 har brukeren skrevet inn "test" felt 3, 4, og 5 er tomme. I felt 6 er det en "drop down" liste som inneholder: "blankt", "test1" og "test2". Her velger man "test2". Videre er det tilsvarende "drop down" lister hvor man har mulighet for å velge blankt eller verdier. Disse settes til blanke. Jeg har nå et enkelt php script hvor jeg har spørring1 AND spørring2. verdiene settes inn i scriptet med '".$_POST['hva']."' Dersom jeg lar et felt være tomt i fromen, altså verdien i spørringen blir satt til "blankt" utføres ikke spørringen. Hvordan skal jeg få til spørringer mot alle 12 feltene, selvom man velger å ikke sette inn verdier i enkelte av feltene? Lenke til kommentar
Kirikiri Skrevet 18. juni 2004 Del Skrevet 18. juni 2004 Er disse "radene" horisontale eller vertikale. Vertikale rader kalles kolonner. Kjekt å vite om du skal søke bortover eller nedover. Kom på at mySQL vel ikke støtter stored procedures, så da blir det litt vanskelig med mitt forslag. Men tankegangen er det samme, hvis du må bygge opp statementet i PHP-koden, før du sender det til mySQL Litt pseudokode, siden jeg ikke kjenner PHP så godt: Dim sStatement as string (eller hvordan man gjør det i PHP) sStatement = "select * from tblTable where 1 = 1 " if felt1 <ikke er tomt> then sstatement = sStatement & " and Felt1-kolonne = " & <SøkeordFraFelt1> end if if felt2 <ikke er tomt> then sStatement = sStatement & " and Felt2-kolonne = " & <SøkeordFraFelt2> end if og så videre. Mulig det vil bli penere å bruke Case i stedet for en og en if / end if. Hvis du skal søke eksplisitt etter tomme verdier i databasen, så kan du gjøre if felt2 <ikke er tomt> then sStatement = sStatement & " and Felt2-kolonne = " & <SøkeordFraFelt2> else sStatement = sStatement & " and Felt2-kolonne is Null " end if[/code] Til slutt sender du hele sStatement til mySQL. Kirikiri Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå