Modérateur PHPfrance |
10684 Messages
21 oct. 2015, 10:37
Bonjour,
Alors effectivement, tu peux utiliser le like (c'est d'ailleurs la seule solution dans ton cas), mais je rejoint Moogli et te recommande fortement (très fortement... TRES TRES FORTEMENT) de revoir la structure de la base de données
En effet, si tous les ids sont dans un même champ texte, outre le fait que celui-ci est limité en taille et que le nombre d'ids qu'il pourra contenir sera également limité (même si dans le principe y en aura probablement pas des milliers), tu vas également rencontrer des problèmes pour aller retrouver une valeur.
Certes le LIKE te permet de faire une condition du genre " WHERE id_proposition_sondage LIKE '%50%' " pour retrouver les sondages contenant l'id 50. Le problème étant qu'il va également te retourner ceux contenant l'id 150, 250, 350, 450, 501, 502, ... que tu ne veux pas.
Il faudrait donc rechercher " WHERE id_proposition_sondage LIKE '% 50,%' " sauf que si le 50 est à la fin, il n'y a pas de virgule après et il ne sera pas retrouvé.
La requête devrait donc devenir " WHERE CONCAT(' ', id_proposition_sondage, ',') LIKE '% 50, %' " pour être sur qu'on a bien que le 50 et pas des 150 ou des 501 ...
Tu devines aisément que les ressources allouées pour faire une concaténation de la valeur de chacun des enregistrements, puis un LIKE sont largement supérieur à un simple = dans une jointure

Et côté stockage, un champ de type texte (qui plus est dans lequel tu es obligé de rajouter des séparateurs) occupe forcément plus de place qu'un champ de type numérique.
Bref, je ne sais pas qui t'as laissé entendre que cette solution serait plus optimisée et consommerait moins, mais je lui suggère fortement de revoir les bases des bases de données...

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...