8798 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis bloqué par un problème depuis un moment.

J'ai une table 1 dans laquelle j'ai un champs liste_id (de la forme ,18,24,78,22,). Ce champs fait référence aux id d'une table 2.
Ma requete a pour objectif de sélectionner les noms de la table 1 à partir de liste_id.

Voici ma requete :


$sql = "SELECT nom FROM table2 WHERE id IN (".$liste_id.")";


Mais ça affiche une erreur.

Merci de votre aide.
Salut,

Sans savoir ce que contient ta variable $liste_id on n'ira pas loin ...
Et tu nous dis que tu as une erreur, on est censé deviner laquelle ?

Donc si tu pouvais nous donner un echo de ta variable $sql et l'erreur retournée, ça nous avancerait pas mal.
Hello,

tu n'aurais pas ce problème si ta table était normalisée : un champ ne doit pas contenir une liste de valeurs

Sinon je vois 2 solutions :

* supprimer les virgules au début et à la fin de ta chaîne. (mieux)

* concaténer avec d'autres valeurs "bidon". (moins bien)
Par exemple
$sql = "SELECT nom FROM table2 WHERE id IN (-1".$liste_id."-1)";
Hem... même si ça fonctionne c'est quand même pas terrible comme solution. Smiley murf

Donc des fois que tu déciderais de faire ça de manière plus propre voici par ordre de préférence les solutions :

1) puisque visiblement chaque enregistrement de table1 est associé à (0, n) ou (1, n) enregistrement(s) de table2 il faudrait avoir cette structure :

table1
id_table1
...

table2
id_table2
id_table1 (lien avec la table 1)
...

Du coup la requête devient
$sql = "SELECT nom FROM table2 WHERE id_table1 = 333";
Et comme je suppose qu'actuellement tu effectues cette requête après en avoir effectué une autre sur table1 ou même dans une boucle cela devient très simple de joindre les 2.

2) quitte à mettre les différents ids de la table 2 dans un même champ de table1 (je me répète mais ce n'est pas une bonne façon de faire) autant le faire de façon à ce qu'il n'y ait de virgules ni au début ni à la fin.

3) si tu gardes ces fameuses virgules (?) il vaudrait mieux les supprimer de la chaîne avant de l'exécuter.

4) cette "solution" à base de valeurs bidons.


PS : si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne