webForumDet fria alternativet

Fler sökord men inte bara som en fras

PHP

5 svar · 296 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hej alla glada!

Sökte men hittade bara en tråd om samma problem, utan svar.

Använder följande:

...SELECT * FROM noter WHERE typ = '".$sec."' AND (titel LIKE '%".$keyword."%' OR artist LIKE '%".$keyword."%' OR komp LIKE '%".$keyword."%' OR genre LIKE '%".$keyword."%' OR forlag LIKE '%".$keyword."%' OR instrument LIKE '%".$keyword."%') ORDER BY titel, komp ASC";

"typ" anger bara vilken kategori det är men det funkar bra. är det som är efter AND som är lurigt.. Söker man på t ex "Lennon Imagine Piano" så vill jag att den ska hitta allt som innehåller lennon, imagine och piano i samma post. Även om alla tre ord är i samma fält eller om det finns ett ord i varsitt fält.. Nu så kollar den efter hela frasen i fält efter fält så att säga.

Hur ska jag lösa det på bästa sätt? :)

Tack!

Medlem sedan juni 20034 013 inlägg
#2

Tja, ett sätt är ju att du splittar upp $keyword (funktionen explode) så du får:

$keywordArr[0] = "Lennon"
$keywordArr[1] = "Imagine"
$keywordArr[2] = "Piano"

Sedan använder du en foreach-loop på $keywordArr, typ:

$sql = "SELECT * FROM noter WHERE typ ='$sec'";
foreach ($keywordArr as $keyword)
{
  $sql .= " AND (titel LIKE '%$keyword%' OR artist LIKE '%$keyword% OR komp LIKE '%keyword%' OR genre LIKE '%$keyword%' OR forlag LIKE '%keyword%' OR instrument LIKE '%$keyword%')";
}
$sql .= " ORDER BY titel, komp";
Medlem sedan nov. 20016 480 inlägg
#3

Tackar :) funkade klockis :D

Medlem sedan okt. 20001 285 inlägg
#4

hmm .. funkar inte för mig .. om man har 2 sökord så blir det träff bara om sökorden finns i samma dokument

Medlem sedan juni 200032 967 inlägg
#5

Byt AND till OR då i SQL-frågan.

mvh

Medlem sedan okt. 20001 285 inlägg
#6

Nej .. visar alla sidor

	if (!empty($_REQUEST['q'])) {
		
		if ($_POST['q']) {
			$sarr = explode(" ", $_POST['q']);
		}
		if ($_GET['q']) {
			$sarr = explode("+", $_GET['q']);
		}

		$sql = "SELECT * FROM news WHERE status != 'N'";
		foreach ($sarr as $keyword)
		{
			$sql .= " AND (subject LIKE '%$keyword%' OR description LIKE '%$keyword%' OR keywords LIKE '%$keyword%')";
		}
		$sql .= " ORDER BY date DESC LIMIT 25";

		$get_news = mysql_query($sql) or die ("<h2>ERROR:</h2>" . mysql_error());
292 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
157 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
157 ms — ändringar (db)