Administrateur PHPfrance |
3088 Messages
13 avr. 2006, 05:09
Oui bien sûr, c'est possible mais particulièrement déconseillé. Et quand je dis "déconseillé" c'est un euphémisme. Pour te donner une idée du niveau de déconseillation c'est à peu près comme ouvrir une boîte de thon avec un tournevis et un marteau. Gustave Parking le fait bien lui, mais c'est ce qui fait son charme.
La normalisation des données est l'outil le mieux adapté, en fait c'est le seul qui soit adapté. Dit comme ça, "normalisation" peut faire peur au début mais tu l'as vu: derrière le mot se cache une idée très simple. Au lieu de faire ("a", "b1,b2,b3") et devoir recourir à des solutions compliquées comme ILIKE tu as ("a", "b1"), ("a", "b2"), ("a", "b3") et tes requêtes restent très simples et très rapides. Sans oublier le risque d'erreur qui est considérablement réduit puisque tu ne peux pas stocker 2 fois ("a", "b1") ou te tromper dans la formulation du ILIKE ou REGEXP. Et je ne parle même pas de ce qu'on appelle l'intégrité des données: dans l'exemple, que se passe-t'il si un élève change d'établissement ?
Forme normale
Pas-normale:
Code : Tout sélectionner
UPDATE table SET liste_ids = REPLACE(',123,', ',', liste_ids) WHERE liste_ids LIKE '%,123,%';
UPDATE table SET liste_ids = SUBSTRING(liste_ids, 4) WHERE liste_ids LIKE '123,%';
UPDATE table SET liste_ids = SUBSTRING(liste_ids, -4) WHERE liste_ids LIKE '%,123';
DELETE FROM table WHERE liste_ids IN ('123', '')
HTH
