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 ?
Annonceindlæg fra Computerworld
12. november 2006 - 14:27
#1
Du kunne jo splitte soeg på mellemrum ( explode() ) og så lave OR LIKE '%<del>%' af alle delene.
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%'
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);
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; }
12. november 2006 - 18:21
#5
der mangler vel nogle OR ?
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 . "%'";
12. november 2006 - 20:46
#7
Erstatter mellemrum. Utestet, men idéen skulle være god nok. Ellers kan implode() benyttes.
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 ?
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 . "%')";
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 ?!
13. november 2006 - 05:29
#11
Ja, .= betyder $sql = $sql . "mere", hvor punktummet blot er alm. streng-konkatinering.
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.
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
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
13. november 2006 - 15:59
#15
nå men smid svar :)
13. november 2006 - 16:25
#16
!
01. december 2006 - 08:27
#17
?
Vi tilbyder markedets bedste kurser inden for webudvikling