---
title: "LIKE gör inte riktigt det jag vill"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/185020-like-gör-inte-riktigt-det-jag-vill"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Web-Tor"
published: "2010-10-24T10:57:56.000Z"
updated: "2010-10-24T17:36:08.000Z"
replies: 10
views: 684
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/185020-like-gör-inte-riktigt-det-jag-vill"
---

# LIKE gör inte riktigt det jag vill

## #1 — Web-Tor, 2010-10-24T10:57Z

Jag har värdet "4;5;6" i (mySQL-)databasen.

Min (PHP-)kod ser ut ungefär så här:

```
$catID = 5;
SELECT * FROM products WHERE cat LIKE "%'.$catID.'%"
```

Problemet är att jag även får träff på "40;50;60".

Hur löser jag detta?

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

## #2 — metalboy, 2010-10-24T11:05Z

Med en bättre databasstruktur. Gör en tabell med kategorier och en tabell som kopplar samman produkt och kategori.

(Det går nog att lösa med regexp också, men det är inte en lika "fin" lösning)

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

## #3 — Web-Tor, 2010-10-24T11:11Z

Jag har en tabell med kategorier och en med produkter.
En produkt kan tillhöra flera kategorier.

Hur skulle jag bygga upp databasen för att koppla ihop produkter med kategorier?

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

## #4 — metalboy, 2010-10-24T11:13Z

Då skapar du en tabell som heter typ **produkt_kategori** som har två fält: **produkt_id** och **kategori_id**.

Om produkt 1 ska tillhöra kategori 1 och 5 så skapar du då två rader i tabellen **produkt_kategori**

```
produkt_id | kategori_id
1          | 1
1          | 5
```

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

## #5 — Quid, 2010-10-24T11:16Z

Gör en tredje tabell som innehåller produkt-id och kategori-id, osso en post för varje kategori som produkten tillhör.

*Edit, metalboy hann före  :)*

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

## #6 — tydal, 2010-10-24T11:16Z

Du skapar en ny tabell, productcategories med två kolumner productID och catID. Om exempelvis produkten 42 finns i de tre kategorierna 40, 50 och 60 så blir det tre rader i den nya tabellen (en rad per kategori och produkt)

productID 42, catID 40
productID 42, catID 50
productID 42, catID 60

Sen JOIN:ar du i dina SELECT-satser för att få fram alla kategorier som en produkt tillhör...

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

## #7 — Web-Tor, 2010-10-24T11:20Z

Tack!

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

## #8 — Web-Tor, 2010-10-24T17:15Z

Något blir fel i min JOIN

```
		$SQL_items = mysql_query('
		SELECT
			id
		FROM
			products
		LEFT JOIN
			product_to_categorie
		ON
			product_to_categorie.prodID = id AND product_to_categorie.catID = '.$catID.'
		WHERE
			display = "1"')
		or die (mysql_error());
```

Jag får nämligen ut fler rader än vad det finns produkter?

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

## #9 — Web-Tor, 2010-10-24T17:28Z

Jag hade lagt in **product_to_categorie.catID = '.$catID.'** på fel ställe. Så här skall det vara:

```
		$SQL_items = mysql_query('
		SELECT
			id
		FROM
			products
		LEFT JOIN
			product_to_categorie
		ON
			product_to_categorie.prodID = products.id
		WHERE
			product_to_categorie.catID = '.$catID.' AND display = "1"')
		or die (mysql_error());
```

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

## #10 — nitro2k01, 2010-10-24T17:35Z

Du vill ha en INNER JOIN, inte en LEFT. Som det är nu plockas alla produkter ut (där display = "1") oavsett om kategorin matchar. En LEFT hade å andra sidan passat om du hade velat plocka ut alla produkter och även velat lista vilka kategorier en produkt tillhör.

Det är även värt att notera att du får ut alla *kombinationer* av produkter och kategorier, vilket inte gör något just nu, men om du lägger till sökning över flera kategorier så kommer du få flera produkt-rader om en produkt matchar flera kategorier. Ett sätt att lösa detta är GROUP BY products.id.

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

## #11 — Web-Tor, 2010-10-24T17:36Z

Om det är någon som kan hjälpa mig med den här frågan skulle jag vara evigt tacksam.
Så här såg koden ut där jag listan alla produkter ut en kategori när jag fortfarande hade "cat" i tabellen "products". Nu har jag ju den informationen i tabellen "product_to_categorie".

```
$SQL_items = mysql_query('
SELECT
	products.id,products.thumb,products_desc.name,products_desc.price
FROM
	products
LEFT JOIN
	products_desc
ON
	products_desc.id = products.id
WHERE
	products.cat = "'.$catID.'" AND products.display = "1"
ORDER BY
	products.id')
or die (mysql_error());
```

(Jag har alltså "products" med grundläggande info om en produkt (vikt, färg, bild) och i tabellen "products_desc" har jag information på olika språk (namn, beskrivning, pris). Mellan dessa tabeller gör jag redan en JOIN och jag fattar inte hur jag skall få till ytterligare en JOIN nu när "categorie" ligger i en egen tabell.)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/185020-like-gör-inte-riktigt-det-jag-vill
