8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je me retrouve face à une petit problème de traitement de chaîne de caractère face auquel je sèche ...

Dans ma base de données, j'ai enregistré des vidéos, des textes et des enregistrements.
À chaque médium enregistré et associé un nombre indéfini de catégories.

Les catégories sont renseignées dans le champs "categ" via leur id, sous ce format : "1, 25, 154, 489".

Mon problème est le suivant : comment puis-je sélectionner tous les media ayant pour identifiant de catégorie le n°1 (par exemple).

En effet, si je fais un "SELECT * FROM Media WHERE categ LIKE '%1,%'" , seront aussi incluses toutes les catégories finissant par '1,".
Et si je fait "SELECT * FROM Media WHERE categ LIKE '% 1,%'" (ajout d'un espace devant le 1), la catégorie de début de liste sera ignorée car l'espace est absent.

Il y a (j'en suis sûr) une solution (très simple), mais elle ne m'a pas encore sauté aux yeux, c'est pourquoi je fais appel à votre bon sens Smiley smile

Merci d'avance !
Modifié par testu (26 Aug 2009 - 14:03)
Salut,

Je dirais qu'il y a ici un problème de logique de base de données, pour ce type de table je te préconiserai la méthode suivante :
- Une table médias avec les champs dont tu as besoin et un id de média.
- Une table catégories avec le nom des catégories et leur id du style:
Humour | 1
Trash | 2
- Une table avec les associations catégorie/média donc :
idCat | idMedia
1 | 25
2 | 125

Après tu peux faire une jointure qui récupère tous les idMedia avec la catégorie 1 et ainsi de suite. Plus qu'à faire une jointure avec ta table où tes médias sont listés pour associer un IdMédia avec les autres champs Smiley cligne
Ok, merci beaucoup, je vais corriger ça Smiley smile

(et c'est reparti pour quelques heures de corrections Smiley langue )