17. juni 2002 - 21:59Der er
10 kommentarer og 1 løsning
Søgning i MySQL base virker kun sporadisk...??
Jeg har forskellige filmtitler oprettet i en MySQL-base med felter som fx. hovedroller, titel osv. Jeg har så et inputfelt til søgning samt et par radiobuttons til at vælge søgeområde, fx. titel ell. hovedroller.
Variablen til udvælgelse af område ryger fint over (visning af den færdige sql-streng er tilgfredsstillende), men selve resultatet af min query er mystisk. Vælger man hovedroller eller instruktør får man de rigtige resultater - vælges titel varierer succesen temmelig kraftigt. Anvendes kun et enkelt søgebogstav får man masser af resultater, mer end 3 er udelukket - og grundlæggende er der ikke rigtig nogen logik i hvornår den melder 'ingen resultater' (hvilket er det grundlæggende problem), og hvornår den allernådigst reagerer på enkelte søgestrenge. Filmen Bangkok Hilton reagerer således fint på søgestrengen 'hil', men ikke på 'ban'...
Jeg er ved at gå lidt kold i det, da sql-strengen tilsyneladende er korerkt, men eksekveringen tvivlsom. Det hele kører på en MySQL 3.23.49, og alle relevante felter (med og uden succesfuld søgning) er varchar's på enten 200 eller 250.
if omr = "titel" then sql = "select * from film where titel like '%" & sstring & "%' or orgtitel like '%" & sstring & "%'" elseif omr = "hovedroller" then sql = "select * from film where hovedroller like '%" & sstring & "%' or hovedroller2 like '%" & sstring & "%'"
Både omr og sstring bliver hevet over korrekt iht. visning af den færdige sql...
Nu viser du kun et udsnit af koden, men ud fra din beskrivelse af problemet ville jeg, hvis jeg havde en, æde min gamle hat på, at du får opbygget dit SQL statement forkert mht. AND/OR. Dette er en meget udbredt fejl, når "folk" skal opbygge et dynamisk SQL statement baseret på en søgeformular.
select * from film where titel like '%asdf%' or orgtitel like '%asdf%' order by titel select * from film where hovedroller like '%asdf%' or hovedroller2 like '%asdf%' order by titel
Det her er den udskrevne variabel lige inden eksekvering - den nederste virker fint...
Een søgning; et input-text-felt og et sæt radiobuttons, hvor man vælger hhv. titel, hovedrolle ell. instruktør.
HAr i øvrigt lige opdaget ved ekstra testning, at der også er problemer i de andre kategorier. Det er altså tilsyneladende alle, der virker sporadisk...
Hmm...det virker stadig ikke. Alle sql-strenge returnerer korrekte resultater, når jeg taster dem direkte ind i phpMyAdmin, så fejlen må ligge et sted i formular/eksekvering på mine sider. Overvejer, om noget af nedenstående et eller andet sted har skjulte fejl.
kat = request.querystring("kat") sstring = request.form("sstring")
if sstring <> "" then omr = request("omr") if omr = "titel" then sql = "select * from film where titel like '%" & sstring & "%' or orgtitel like '%" & sstring & "%'" elseif omr = "hovedroller" then sql = "select * from film where hovedroller like '%" & sstring & "%' or hovedroller2 like '%" & sstring & "%'" else sql = "select * from film where " & omr & " like '%" & sstring & "%'" end if msg = "Søgningen gav intet resultat" else sql = "select * from film" if kat <> "all" then sql = sql & " where kategori = " & kat end if msg = "Ingen film i denne kategori endnu" end if
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.