Avatar billede stuffedk Nybegynder
18. maj 2005 - 23:08 Der er 7 kommentarer og
1 løsning

SQL søgefelt

Hej jeg er igang med at lave en søge funktion til mit forum. Jeg troede det var nemt, men det er sværere end det lyder. Først skal søge ordet deles op i dele hvor der er mellemrum. dernæst skal data fra mit sql table (der hedder "trad") hentes og deles. dernæst skal data hentes fra mit andede table der hedder besked og så skal denne deles op i dele. til sidst skal alle disse dele sammenlignes med de dele fra søgningen, og emnet skal hentes ud fra de tables hvor delene macher. Jeg har selv prøvet og ved hvordan man gør alle tingene, men koden blev til sidst for uoverskuelig, så nu spørger jeg herinde. Det jeg gerne vil have er et helt script. hvis i vil have flere points må i sige til. og istedet for at skrive
$db = mysql_connect("hejhej.dk", "blabla", "kode");
  mysql_select_db("blabla", $db);  kan i bare skrive include("database.php");
Avatar billede horsmark Nybegynder
19. maj 2005 - 02:01 #1
mht sql kan du bruge LIKE %% meeen den skal man altid lige holde ret meget øje med da den sluger kraft og saft fra serveren.

Noget alá dette...

$input = $_POST['searchstring']

$sql = "
SELECT * FROM
  trad, besked
WHERE
  trad.id = besked.id AND
  ( trad.[søgekollonne] LIKE '%{$input}%' ||
    besked.[søgekollonne] LIKE '%{$input}%' )
";
Avatar billede horsmark Nybegynder
19. maj 2005 - 02:02 #2
og ovenstående napper så lige hele søgestrengen inklusiv mellemrum, kommaer, mv
Avatar billede busschou Praktikant
19. maj 2005 - 06:48 #3
Som horsmark skriver er det vejen at bruge LIKE
Det er muligt den sluger og suger. Men der er ikke nogen nemmere måde i mine øjne at søge igennem en database på for søgeord end bruge LIKE
Dog beskriver du det som om du førest henter fra en tabel, så en anden og først til sidst søger, så du kunne bruge union
---
$sql1 = "Select id,name,date,content From trad";
$sql2 = "Select id,name,date,content From besked";
$sql3 = "Select * From ($sql1 UNION $sql2) Where content Like '%$input%' Or name Like '%$input%'";
mysql_query($sql3) or die (mysql_error);
---
bemærk at en union kun virker hvis der haves de samme felter af samme type! (herover i eksemplet altså id,name,date og content)
Søgeordet $input splitter du op enten med split() funktione
http://dk.php.net/split
Eller med preg_split() funktionen
http://dk.php.net/manual/en/function.preg-split.php
Du er derfor nød til at lave din sql dynamisk ud fra længden af din splittede $input
Hvor du i hvert loop indsætter "Or name Like '%$inputArr[i]%'" og så fremdeles
Dermed bliver den pænt lang din sql ja
Avatar billede stuffedk Nybegynder
19. maj 2005 - 11:46 #4
nice tak. Jeg kendte slet ikke den like der. nu har jeg lavet en search til min side, men jeg ved ikke hvem der vilhave points. check det på onkelmor.dk/grafikforum2 hvis i gider (den er langt fra færdig)
Avatar billede horsmark Nybegynder
19. maj 2005 - 11:50 #5
Avatar billede busschou Praktikant
19. maj 2005 - 12:12 #6
Du bestemmer selv fordelingen :o)
Godt det virker
Avatar billede stuffedk Nybegynder
20. maj 2005 - 01:29 #7
pis nu kom jeg til at give  busschou alle pointsne selv om det var horsmark der skrev det med like først. undskyld horsmark jeg ville have givet dig halvdelen
Avatar billede busschou Praktikant
20. maj 2005 - 06:41 #8
horsmark >> de 50 point er her :o)
http://www.eksperten.dk/spm/619170
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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

IT-JOB