Avatar billede tamen Nybegynder
23. april 2002 - 21:32 Der er 10 kommentarer og
1 løsning

Er min syntax forkert eller er jeg dum?

Jeg er ved at lave en søgefunktion til et site med en masse artikler (som i måske kan gætte ud af koden:

SELECT id,overskrift FROM $table_name WHERE godkendt='1' AND type='1' AND startdato < '$thetime' AND slutdato > '$thetime' AND forfatter LIKE \"$search%\" OR overskrift LIKE \"$search%\" OR teaser LIKE \"$search%\" OR artikel LIKE \"$search%\" order by id ASC

variablen thetime er sat til tiden, men det jeg vil have den til er at finde de artikler hvor godkendt, type, start-og slutdato er de ting jeg har sat den til, og hvor resten, forfatter, overskrift, teaser, eller artikel, ligner det ($search) som brugeren søger efter.
Men det virker ikke rigtigt. Jeg har en masse test artikler oprettet med en overskrift der hedder "skal vises idag", og hvis jeg søger på "skal ...." kommer de fint frem, men jeg får ikke nogen resultater hvis jeg søger på "vises...".
Og desuden ser den ud som om den fuldstændigt glemmer at de først ting skal være bestemte værdier, hvis jeg ikke skriver noget i søgefeltet får jeg også artikler frem der har type sat til 2 og artikler der ikke er godkendte.

HVad gør jeg galt??
Avatar billede disky Nybegynder
23. april 2002 - 21:34 #1
pas på med brugen af AND og OR samtidigt, sæt () rundt om dem så du har helt styr på i hvilket tilfælde den skal gøre det osv.
Avatar billede erikjacobsen Ekspert
23. april 2002 - 21:37 #2
...og med like skal du

  overskrift LIKE "%$search%"

hvis den skal finde ord inde i overskriften. Det er hamrende ineffektivt,
men det ved du vel
Avatar billede tamen Nybegynder
23. april 2002 - 21:53 #3
Næ det vidste jeg ikke. Er der en bedre måde at gøre det på? Helst ikke noget der er meget mere avanceret. Det skal ikke være det store søgesystem, og der er heller ikke det vilde antal brugere.

De paranteser er det noget i denher retning?
SELECT id,overskrift FROM $table_name WHERE (godkendt='1' AND type='1' AND startdato < '$thetime' AND slutdato > '$thetime') AND (forfatter LIKE "$search%" OR overskrift LIKE "$search%" OR teaser LIKE "$search%" OR artikel LIKE "$search%") order by id ASC
Avatar billede erikjacobsen Ekspert
23. april 2002 - 21:57 #4
Prøv om du kan leve med det. Ellers det noget der hedder FULLTEXT i Mysql - det er måske
nok avanceret implementeret, men ret simpelt at bruge. Få det nu bare til virke først.
Avatar billede disky Nybegynder
23. april 2002 - 22:33 #5
tamen:

Ja lige netop

Når du bruger like skal du huske at anvende % som wildcard de korrekte steder.
Avatar billede tamen Nybegynder
23. april 2002 - 23:00 #6
Jeg har fået det til at virke nu, tak for hjælpen begge to :)
Kan man dele points ud til to ?
Avatar billede sthen Nybegynder
24. april 2002 - 00:32 #7
ja det ka' man godt
Avatar billede disky Nybegynder
24. april 2002 - 12:53 #8
yep uden problemmer, det er noget med du skal trykke 'avanceret' eller lignenden.
Avatar billede tamen Nybegynder
24. april 2002 - 20:09 #9
jeg kan ikke lige finde ud af det, men det er også kun disky der har svaret. Jeg gir points til disky, og så kan erikjacobsen kontakte mig hvis han vil ha points.
Jeg kan nås på tamen@mac.com

Tak for hjælpen begge to :)
Avatar billede disky Nybegynder
24. april 2002 - 20:28 #10
ud fra hvad du beskriver øverst skulle dette virke:

SELECT id,overskrift FROM $table_name WHERE godkendt='1' AND type='1' AND startdato < '$thetime' AND slutdato > '$thetime' AND (forfatter LIKE "%$search%" OR overskrift LIKE "%$search%" OR teaser LIKE "%$search%" OR artikel LIKE "%$search%") order by id ASC


Jeg har sat paranteser og sat et % i starten af dine likes, ellers kræver det at dine søge felter skal starte med indholdet af din $search variable.

prøv det, eller sig til
Avatar billede tamen Nybegynder
26. april 2002 - 17:55 #11
Jeg fikd et til at virke jeg mener at koden er stortset det samme som din, dog har jeg også sat paranteser om de første betingelser:
SELECT id,overskrift FROM $table_name WHERE (godkendt='1' AND type='1' AND startdato < '$thetime' AND slutdato > '$thetime') AND (forfatter LIKE "%$search%" OR overskrift LIKE "%$search%" OR teaser LIKE "%$search%" OR artikel LIKE "%$search%") order by id ASC

Og så vidt jeg kan se virker det som jeg vil ha det til.
Tak for hjælpen.
Jeg bliver gang på gang overrasket over hvor hurtig og god hjælp man får her :)
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
Computerworld tilbyder specialiserede kurser i database-management

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