23. april 2002 - 21:32Der 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.
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
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.
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
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.
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 :)
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.