Johan!Medlem sedan maj 2000156 inlägg Jag håller på med en sökfunktion skriven i PHP som ska söka igenom 3 kolumner i min mysql databas. Det är en musikdatabas där en av kolumnerna som ska sökas är "artist", den andra "song_title" och den tredje "url". Gör man en sökning på tex "Madonna" ska man få fram en lista på alla de poster som hade "Madonna" någonstans i dessa fält. Söker man på "madonna frozen" ska man bara få fram resultatet där madonna finns i en av kolumnerna och frozen i samma kolumn eller i en av de andra.
I en tidigare version låg både artist och song_title sparad i samma kolumn och då brydde jag mig inte om att söka igenom URLn (men den innehåller ofta låtnamn eller och artist och ibland har jag bara urln att gå på därav måste den finnas med i den nya versionen). Förrut använde jag mig därför av en enkel
Select bla bla WHERE namn LIKE '%Madonna%';
Detta var egentligen ingen bra lösning eftersom en sökning på "frozen madonna" inte hade gett några resultat och endast "madonna frozen" funkade. Nu är det helt omöjligt på detta sätt?
Skulle vara mycket tacksam för tips. Den lösning jag kommit fram till hittils vore att dela upp de ord man angett vid sökningen och först ta fram alla sånger som då har "madonna" och sedan göra en sökning till på andra ordet (frozen) i de resultat jag redan fått fram. Är det en bra lösning och i så fall, hur genomför man det på bästa sätt?
Mvh
Johan
woodiMedlem sedan feb. 20001 270 inlägg Kör en explode i php på söksträngen och bygg upp en query..
T.ex. om $soktext='madonna frozen'
$ord=explode(" ",$soktext);
$query="select * from tabellen where";
for($x=0; $x<count($ord); $x++){
$query.=" artist like '%$ord[$x]%' or song_title like '%$ord[$x]%' or url like '%$ord[$x]%'";
}
$res=mysql_query($query);
$query i det här fallet ser ut på följande sätt:
select * from tabellen where artist like '%madonna%' or song_title like '%madonna%' or url like '%madonna%' or artist like '%frozen%' or song_title like '%frozen%' or url like '%frozen%'
Hoppas att detta hjälpte dig.
------------------
woodi
Svenska FF1
www.johan-skog.nu
Johan!Medlem sedan maj 2000156 inlägg Tackar. Precis vad jag letade efter.
/ Johan
woodiMedlem sedan feb. 20001 270 inlägg Kul att det hjälpte Dina bekymmer!
------------------
woodi
Svenska FF1
www.johan-skog.nu
Borde det inte vara
$ord=explode(" ",$soktext);
$query="SELECT * FROM tabellen WHERE";
for($x=0; $x<count($ord); $x++){
if ($x>0){ $query .= " OR"; }
$query.=" artist LIKE '%$ord[$x]%' OR song_title LIKE '%$ord[$x]%' OR url LIKE '%$ord[$x]%'";
}
Annars kommer väl söksträngen sakna ett "OR"?
------------------
Gislaved.net
"Tänk på vad du säger så att du inte säger vad du tänker."
phoyerMedlem sedan jan. 200137 inlägg om man vill peta in ett ORDER BY här, vart ska den in?
LarsGMedlem sedan dec. 200012 464 inlägg $ord=explode(" ",$soktext);
$query="SELECT * FROM tabellen WHERE";
for($x=0; $x<count($ord); $x++){
if ($x>0){ $query .= " OR"; }
$query.=" artist LIKE '%$ord[$x]%' OR song_title LIKE '%$ord[$x]%' OR url LIKE '%$ord[$x]%'";
}
$query .= " order by something "
------------------
essentitia preter non sans multiplicandum