[mysql] meerdere categorien voor 1 product

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 15:59
Hallo,

Ik ben bezig om een webshop aan te passen. Ik wil dat producten in meerdere categorien kunnen staan.
Daarom had ik een veld in de table producten aangemaakt met de naam categorie als varchar 255. En daar de categorie id's ingezet gescheiden door een komma dus bijvoorbeeld 1,2,3,4.

Nu wil ik een overzicht pagina maken voor een categorie en wil ik dus alleen producten krijgen die bij die categorie horen. Eerder loste is dat op door WHERE categorie = '".$catid."' maar doordat het gescheiden is door komma's werkt dat niet.

Ik heb gegooglt en zag dat WHERE ... IN () hiervoor zou kunnen werken, alleen krijg ik dat niet werkend..

de volgende query heb ik:

code:
1
SELECT * FROM producten WHERE ".$categorie[id]." IN (categorie) AND actief = 1


Dat werkt dus helaas niet. (ook niet in phpadmin sql tab) Waar ik wel al achter ben ik dat als ik het categorie id vooraan zet, dus voor een komma, dat het wel werkt maar dan niet voor de andere categorien die bij dit product staan.

Wat doe ik fout?

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat je fout doet is dat je niet bedacht hebt dat 1 op veel relatie vast wel in een relationele dbms mogelijk zijn. ;) Ergo, lees hoe zo'n relatie werkt en zorg dat je straks niet meer van dit soort smerige csv kolommen hebt. :)

{signature}


Acties:
  • 0 Henk 'm!

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Nee, dat is logisch, want je gebruikt de IN operator verkeerd. Die is bedoeld om te kijken of een kolom een waarde heeft die gelijk is aan een van de waardes in een lijst die je meegeeft. Niet andersom ;-).

Wat je wel wilt is een many-to-many relatie tussen je producten en je categorieën maken.

Verder zou je misschien ook wat willen lezen over SQL injecties, want de manier waarop je nu je queries opbouwt lijkt daar gevoelig voor te zijn.

Acties:
  • 0 Henk 'm!

  • Staatslot
  • Registratie: December 2007
  • Laatst online: 02-09 09:58
En om je nog even op weg te helpen zonder dat je hoeft te klikken..
Ik zou het doen door een tabel te maken met categorieën, een tabel met producten en een tabel koppel_categorie_product.

In koppel_categorie_product neem je het id'tje op van je product en het id'tje van je categorie.
Wil je pruducten uit catergorie 23:

code:
1
select productid from koppel_categorie_product where categorieid='23';


Eventueel kun je dat uitbreiden met JOINS zodat je direct meer info uit de product tabel haalt..

Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 15:59
Thx, ga het zo dan oplossen

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

Staatslot schreef op maandag 19 december 2011 @ 22:17:
En om je nog even op weg te helpen zonder dat je hoeft te klikken..
Ik zou het doen door een tabel te maken met categorieën, een tabel met producten en een tabel koppel_categorie_product.

In koppel_categorie_product neem je het id'tje op van je product en het id'tje van je categorie.
Wil je pruducten uit catergorie 23:

code:
1
select productid from koppel_categorie_product where categorieid='23';


Eventueel kun je dat uitbreiden met JOINS zodat je direct meer info uit de product tabel haalt..
Waarom id als varchar en niet als int?

If money talks then I'm a mime
If time is money then I'm out of time

Pagina: 1