webForumDet fria alternativet
Logga in / Bli medlem

Lämplig sökfunktion?

Databaser & SQL

6 svar · 424 visningar · startad av Johan!

Medlem sedan maj 2000156 inlägg
Frågan#1

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

Medlem sedan feb. 20001 270 inlägg
#2

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.

Medlem sedan maj 2000156 inlägg
#3

Tackar. Precis vad jag letade efter.

/ Johan

Medlem sedan feb. 20001 270 inlägg
#4

Kul att det hjälpte Dina bekymmer!

Medlem sedan juni 20001 521 inlägg
#5

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"?

Medlem sedan jan. 200137 inlägg
#6

om man vill peta in ett ORDER BY här, vart ska den in?

Medlem sedan dec. 200012 464 inlägg
#7
$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 "
259 ms totalt · 4 externa anrop · v20260731065814-full.1b2494f0
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)