---
title: "Sökfunktion som plockar flera sökord"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/181180-sökfunktion-som-plockar-flera-sökord"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "niNe"
published: "2009-11-12T09:07:06.000Z"
updated: "2009-11-12T14:36:54.000Z"
replies: 4
views: 585
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/181180-sökfunktion-som-plockar-flera-sökord"
---

# Sökfunktion som plockar flera sökord

## #1 — niNe, 2009-11-12T09:07Z

Tjenare

Har en sökfunktion på min site som funkar klockrent när man söker på ett ord. Nu skulle jag ju då vilja utöka denna till att leta på flera ord. 

Min SQLquery ser ut enligt nedan:

```
$search = $_GET['search'];
$news = mysql_query("SELECT * FROM news WHERE info LIKE '%".$search."%' AND publish='1' OR headline LIKE '%".$search."%' AND publish='1' ORDER BY newsdate DESC");
```

Om jag börjar söka på fler ord så får jag ju inga träffar. Sökfältet skickar ju dock ut Sökord1+sökord2... Någon som kan skicka mig i rätt riktning.

Permalänk: https://www.webforum.nu/p/181180

## #2 — Obbelix, 2009-11-12T11:36Z

Du måste använda lite parenteser:

SELECT \* FROM news WHERE 
(info LIKE '%".$search."%' OR headline LIKE '%".$search."%') AND publish='1' 
ORDER BY newsdate DESC

Permalänk: https://www.webforum.nu/p/2214167

## #3 — niNe, 2009-11-12T12:02Z

Mja, det löser ju inte riktigt mitt problem. Jag behöver dock inte skriva in "publish" vilket uppskattas. Får dock inga träffar på fler ord än ett...

Permalänk: https://www.webforum.nu/p/2214168

## #4 — nitro2k01, 2009-11-12T12:03Z

LIKE är intelligent på det sättet som man kanske tror. LIKE '%sökord1+sökord2%' t ex söker just efter strängen sökord1+sökord2. Vad du måste göra är att dela upp strängen i till en array t ex med funktionen [explode](http://php.net/manual/en/function.explode.php), sedan konstruera ett antal undersatser. Dessutom bör du se till att varje enskilt ord är minst 3 tecken långt, gärna 4 till och med, för att inte försvåra för databasen.
Men först av allt, mysql_real_escape_string för att undvika SQL-injektioner!

```
$wordstring = mysql_real_escape_string($_GET['search']);

$words = explode(' ', $wordstring);

for_each($words as $word){
  if(strlen($word)<3){
    $error = 'Fel! Alla sökord måste vara minst 3 tecken långa!';
  }else{
    subarray[]= "(info LIKE '%".$words[$i]."%' OR headline LIKE '%".$words[$i]."%')";
  }
}
```

Detta samlar alla undersatser i en array. Sedan klistrar du ihop dessa satser antingen med AND eller OR. AND gör att alla orden måste finnas med för att matchning ska ske, OR gör att endast ett ord måste finnas med. Detta väljer du lämpligen med en checkbox. 

```
if ($alla_ord){
  $subexpression = implode(' AND ', $subarray);
}else{
  $subexpression = implode(' OR ', $subarray);
}
```

Sist infogar du hela underuttrycket och kör frågan.

```
if (isset($error)){
  echo $error;
}else{
  $news = mysql_query("SELECT * FROM news WHERE ( $subexpression ) AND publish='1' ORDER BY newsdate DESC");
}
```

Ungefär så...

Permalänk: https://www.webforum.nu/p/2214169

## #5 — niNe, 2009-11-12T14:36Z

Jag tackar så mycket för assistansen! Använde inte exakt denna, men den hjälpte mig in på rätt spår!

Permalänk: https://www.webforum.nu/p/2214186

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/181180-sökfunktion-som-plockar-flera-sökord
