Avatar billede grinebidder Nybegynder
26. december 2000 - 20:47 Der er 17 kommentarer og
4 løsninger

Søgefunktion

Okay ... det her er nok let nok for nogle, så tag lige og hjælp, tak :-)

Jeg har en MySQL-database. Jeg vil gerne kunne søge i fx tabellen »sange«. Så skal jeg have lavet en søgefunktion, som kan finde ud af at søge på flere ord :) Så fx hvis jeg søger på »white christmas«, så finder den sange, hvor enten white eller christmas eller begge ord indgår.

Glædelig jul :)
Avatar billede lp Nybegynder
26. december 2000 - 20:53 #1
en simpel søgefunktion som tjekker om et af flere ord indgår kunne nok godt laves......har du nogle data pt. som jeg kan bruge til at starte med?
Avatar billede ramlev Nybegynder
26. december 2000 - 20:53 #2
SELECT * FROM sange WHERE rowname LIKE \'%$søgevariabel%\';
Avatar billede jd Nybegynder
26. december 2000 - 20:59 #3
<?
$soge_str = \"white christmas\";
$exp = explode(\" \",$soge_str);

for($i=0; count($exp) > $i; $i++){
$q = mysql_query(\"select * from tabel where et_felt like \'%$exp[$i]%\'\") or die(mysql_error());
while($r=mysql_fetch_array($q)){
echo $r[etellerandetfelt].\"<br>\\n\";
}
}
?>

UTESTET

/Jon@z
Avatar billede jd Nybegynder
26. december 2000 - 21:00 #4
Det ville klart være bedre/hurtigere at lave det hele i et query, men det bliver noget klumpet kode :)
Avatar billede lp Nybegynder
26. december 2000 - 21:01 #5
jonas\' udgave kunne også laves med 1 sql, fremfor ligeså mange som det antal ord man indtaster......en lille ændring og det skulle være kørende.......
Avatar billede JanusHoi Praktikant
26. december 2000 - 21:01 #6
Her er LIGE nøjagtiig hvad du skal bruge....

http://www.hansanderson.com/php/search/

Ellers tag et kig på...

http://www.hotscripts.com/PHP/Scripts_and_Programs/Searching/Database_Search/

Jeg søger selv en søgemaskine. Men det jeg søger er en der ikke kun behøver at søge i databaser.

Der er masser der kan søge i databaser, så det er bare at tage en man synes ser god ud og så prøve sig lidt frem.

Den første URL jeg skrev ser ret god ud efter min opfattelse.

--
Master HØI
Avatar billede lp Nybegynder
26. december 2000 - 21:02 #7
jonas -> er det ok, at jeg tager udgangspunkt i dit eksempel og viser hvorledes det kunne gøres med en sql?
Avatar billede jd Nybegynder
26. december 2000 - 21:06 #8
Ups!!! Mit eksempel starter jo en uendelig løkke, så ret lige \'>\' til \'<=\' i for-løkken :)

lp-> Jow, da! Men det arbejder jeg også selv på (jeg opdagede at det jo var ganske let :) Så du kan lige så godt spare dig :)
Avatar billede bo.morville Nybegynder
26. december 2000 - 21:06 #9
jd har fat i noget af det rigtige, men en lille tilføjelse er nok nødvendig...

<?
$soge_str = \"white christmas\";
$exp = explode(\" \",$soge_str);

$SQL = \"SELECT * FROM tabel WHERE\";
for ($i=0;$i<sizeof($exp);$i++) {
if ($i=0) $SQL.=\" et_felt like \'%$exp[$i]\'\";
else $SQL.=\" OR et_felt like \'%$exp[$i]\'\";
}
$result = mysql_query($SQL);
while ($row=mysql_fetch_array($result)) {
echo $row[felt_der_skal_vises].\"<br>\\n\";
}
?>

Dermed kan du nøjes med en query på din DB (hvilket gør dit script hurtigere...)
Avatar billede jd Nybegynder
26. december 2000 - 21:07 #10
forresten tak til ramlev der opdagede fejlen :)
Avatar billede bo.morville Nybegynder
26. december 2000 - 21:08 #11
sorry jeg havde ikke set det mellemliggende da jeg var ved at lave scriptet. Håber ikke jeg har irriteret nogen.

/bo.morville
Avatar billede ramlev Nybegynder
26. december 2000 - 21:08 #12
;-)..
Avatar billede lp Nybegynder
26. december 2000 - 21:08 #13
<?
$soge_str = \"white christmas\";
$exp = explode(\" \",$soge_str);

for($i=0; count($exp) <= $i; $i++){
if ($i!=0 && $i!=count($exp)) {
$sqlString = \" OR \"
}
$sqlString .= \"feltnavn like \'%\". $exp[$i]. \"%\'\"
}
$q = mysql_query(\"select * from tabel where \".$sqlString.\"\") or die(mysql_error());
while($r=mysql_fetch_array($q)){
echo $r[etellerandetfelt].\"<br>\\n\";
}
?>

OGSÅ UTESTET!!!
Avatar billede jd Nybegynder
26. december 2000 - 21:11 #14
Sådan her?

<?
$soge_str = \"white christmas\";
$exp = explode(\" \",$soge_str);

$query = \"select * from din_tabel where et_felt like \'%$exp[0]%\'\";

for($i=1; count($exp) <= $i; $i++){
$query .= \" || et_felt like \'%$exp[$i]%\'\"
}

$q=mysql_query(\"$query\") or die(mysql_error());
while($r=mysql_fetch_array()){
echo $r[etellerandetfelt].\"<br>\\n\";
}
?>

Gider du teste det grinebidder ?
Avatar billede bo.morville Nybegynder
26. december 2000 - 21:12 #15
Så skal det i øvrigt være:
<?
$soge_str = \"white christmas\";
$exp = explode(\" \",$soge_str);

$SQL = \"SELECT * FROM tabel WHERE\";
for ($i=0;$i<sizeof($exp);$i++) {
if ($i=0) $SQL.=\" et_felt like \'%$exp[$i]%\'\";
else $SQL.=\" OR et_felt like \'%$exp[$i]%\'\";
}
$result = mysql_query($SQL);
while ($row=mysql_fetch_array($result)) {
echo $row[felt_der_skal_vises].\"<br>\\n\";
}
?>

jeg havde glemt nogle % ...
Avatar billede jd Nybegynder
26. december 2000 - 21:13 #16
bo.morville && lp-> DOH!! Vi skulle vist ha snakket sammen først, hva\'!? :)

Det bedste er da at vi er enige... :)
Avatar billede lp Nybegynder
26. december 2000 - 21:13 #17
he he, nemlig jd :-)
Avatar billede grinebidder Nybegynder
26. december 2000 - 21:14 #18
Takker for hjælpen ... jeg tester det lige igennem og vender tilbage :-)
Avatar billede jd Nybegynder
26. december 2000 - 23:45 #19
mange tak :)
Avatar billede grinebidder Nybegynder
27. december 2000 - 00:10 #20
Var så lidt ... det kunne jo bruges alt sammen :)
Avatar billede jd Nybegynder
27. december 2000 - 00:14 #21
Ja, eller i hvert fald éen af dem :)
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