Avatar billede clausga Nybegynder
12. november 2006 - 14:15 Der er 17 kommentarer

Søgefunktion som kan tage forskellige ord

Lige nu bruger jeg:

SELECT * FROM produkter WHERE info LIKE '%$soeg%'");

Men hvis nu teksten er "Sony-Playstation 3 blu-ray afspiller" og så man søger på fx: "sony blu ray" eller "sony afspiller" så virker min version jo ikke...

men kan ikke lave noget så jeg også kan søge på de andre måder så det stadig virker ?
Avatar billede jensgram Nybegynder
12. november 2006 - 14:27 #1
Du kunne jo splitte soeg på mellemrum ( explode() ) og så lave OR LIKE '%<del>%' af alle delene.
Avatar billede jensgram Nybegynder
12. november 2006 - 14:28 #2
Lidt vagt formulering, men:

$soeg = "sony blu ray";

~dele = ['sony', 'blu', 'ray']

SQL = ...WHERE info LIKE '%sony%' OR info LIKE '%blu%' OR info LIKE '%ray%'
Avatar billede Slettet bruger
12. november 2006 - 14:53 #3
$sql = "SELECT * FROM produkter WHERE";

$seeks = explode(" ", $_POST['seek']);
$search = "";
for($i=0; $i<count($seeks); $i++) {
  $search .= " info LIKE = '".$seeks[$i]."'";
}
$sql = $sql.$search;
mysql_query($sql);
Avatar billede clausga Nybegynder
12. november 2006 - 18:12 #4
Jeg kan ikke få det til at virke, jeg får denne fejl: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

$sql = "SELECT * FROM produkter WHERE";

$seeks = explode(" ", $_POST['soeg']);
$search = "";
for($i=0; $i<count($seeks); $i++) {
  $search .= " info LIKE = '".$seeks[$i]."'";
}
$sql = $sql.$search;
$q = mysql_query($sql);


while($row = mysql_fetch_array($q)) {

$titel = $row["titel"];

echo $titel;
}
Avatar billede clausga Nybegynder
12. november 2006 - 18:21 #5
der mangler vel nogle OR ?
Avatar billede jensgram Nybegynder
12. november 2006 - 20:45 #6
Lidt simplere:

$sql = "SELECT * FROM produkter WHERE";
$s = $_POST['soeg'];
$s = str_replace(' ', "%' OR info LIKE '%", $s);

$sql .= "info LIKE '%" . $s . "%'";
Avatar billede jensgram Nybegynder
12. november 2006 - 20:46 #7
Erstatter mellemrum. Utestet, men idéen skulle være god nok. Ellers kan implode() benyttes.
Avatar billede clausga Nybegynder
12. november 2006 - 21:16 #8
Ja den virker jens :) men det burde vel egentlig hedde AND og ikke OR vel ?? :)

men hvad nu hvis mysql stringen hedder: WHERE (info LIKE '%$soeg%' OR titel LIKE '%$soeg%')

hvordan udvider jeg så dit eksempel ?
Avatar billede clausga Nybegynder
12. november 2006 - 21:23 #9
Så skal der vel bare lige denne linie på ;) så det bliver:

$s = str_replace(' ', "%' AND info LIKE '%", $s);
$t = str_replace(' ', "%' AND titel LIKE '%", $s);

$sql .= " (info LIKE '%" . $s . "%'";
$sql .= " OR titel LIKE '%" . $t . "%')";
Avatar billede clausga Nybegynder
12. november 2006 - 21:32 #10
Ja sådan her:

$se = "sogeord";

$s = str_replace(' ', "%' AND info LIKE '%", $se);
$t = str_replace(' ', "%' AND titel LIKE '%", $se);

$sql .= " (info LIKE '%" . $s . "%'";
$sql .= " OR titel LIKE '%" . $t . "%')";

Så ser det ud til det virker perfekt

når man skriver $sql. og derefter en linie mere med sql. betyder det så bare at den sætter det hele sammen til en string ?!
Avatar billede jensgram Nybegynder
13. november 2006 - 05:29 #11
Ja, .= betyder $sql = $sql . "mere", hvor punktummet blot er alm. streng-konkatinering.
Avatar billede jensgram Nybegynder
13. november 2006 - 05:30 #12
AND / OR - det kommer an på hvad du vil. Skal ALLE ordene optræde så er det AND - er et eller flere nok, så er det OR.
Avatar billede clausga Nybegynder
13. november 2006 - 10:38 #13
det vil sige hvis man siger:

...WHERE (info LIKE '%sony%' AND info LIKE '%playstation%' OR titel LIKE '%sony%' AND info LIKE '%playstation%')

så betyder det at ENTEN titel ELLER info skal indeholde : sony playstation
Avatar billede jensgram Nybegynder
13. november 2006 - 13:45 #14
Uhh - jeg er ikke sikker på, hvad der binder stærkest - hvis AND kommer før OR så betyder ovenstående:

info LIKE '%sony%' AND info LIKE '%playstation%'

ELLER

titel LIKE '%sony%' AND info LIKE '%playstation%'


Altså
ENTEN info: sony OG info: playstation
ELLER titel: sony OG info playstation
Avatar billede clausga Nybegynder
13. november 2006 - 15:59 #15
nå men smid svar :)
Avatar billede jensgram Nybegynder
13. november 2006 - 16:25 #16
!
Avatar billede jensgram Nybegynder
01. december 2006 - 08:27 #17
?
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