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?
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%'
$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]%'";
}
$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 "
256 ms totalt · 4 externa anrop · v20260731065814-full.05830320