Avatar billede pollas Nybegynder
17. juni 2002 - 21:59 Der 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.

Har jeg overset noget fuldstændigt?

På forhånd mange tak!
Avatar billede kimiwan Nybegynder
17. juni 2002 - 22:15 #1
Du kan prøve at lave søgestrengen lowercase, samt feltet, der søges i lowercase med LCASE() funktionen i sqlstrengen.
Avatar billede pollas Nybegynder
18. juni 2002 - 02:39 #2
Har prøvet - det er ikke det.... :(
Avatar billede kimiwan Nybegynder
18. juni 2002 - 03:59 #3
hvordan ser dit sql kald så ud, hvis vi må få lov at se det?
Avatar billede pollas Nybegynder
18. juni 2002 - 07:50 #4
Snittet fra koden:

  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...
Avatar billede tmceu Praktikant
18. juni 2002 - 09:11 #5
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.
Avatar billede pollas Nybegynder
18. juni 2002 - 09:17 #6
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...
Avatar billede tmceu Praktikant
19. juni 2002 - 06:01 #7
Er det 2 forskellige søgninger ? kan man kun søge på ét felt ad gangen ?
Avatar billede pollas Nybegynder
19. juni 2002 - 08:49 #8
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...
Avatar billede pollas Nybegynder
20. juni 2002 - 04:14 #9
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

sql = sql & " order by titel"

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.Open sql, strDSN, 2

Jeg har SÅ meget brug for hjælp. Giver galdeligt flere point og præmier, for jeg forstår det simpelthen ikke... :(
Avatar billede pollas Nybegynder
20. juni 2002 - 04:15 #10
Hvad med store/små bogstaver, mellemrum osv - kan det have noget at sige?
Avatar billede pollas Nybegynder
28. august 2002 - 20:10 #11
lukker
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
Kategori
Kurser inden for grundlæggende programmering

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