requete select pour un multichoix

Eléphanteau du PHP | 13 Messages

19 nov. 2007, 13:13

foreach($_POST['fruits'] as $valeur)
{
.....
..... INSERT ........ VALUES (....,$valeur,.....)....
....
}
Si tu veux enregistrer toutes les valeurs dans un seul champ je te conseille d'utiliser implode ou ce qui est indiqué ici : Comment insérer un tableau (array) dans une table avec la fonction serialize?
Après avoir stocké les résultats multichoix dans un seul champ , comment est-il possible de faire une requête sql multichoix sur ce champ

Exemple: une personne a choisi 'pomme' 'orange' 'banane' et je voudrais récuprérer toutes les personnes ayant choisi 'pomme' OU 'banane'

Si j'ai stocké mon résultat sous forme d'un tableau dans un seul champ, la requete WHERE fruits IN ('banane','pomme') ne fonctionnera pas.

Et la requete WHERE fruits LIKE '%pomme%' ne me permet de tester qu'une seule possibilité.

Je voudrais éviter d'utiliser une requete WHERE fruits LIKE '%pomme%' OR fruits LIKE '%banane%' car ma requete risque d'être très longue.

Voyez vous un autre moyen de traiter cette question ?

Merci par avance si vous pouvez faire quelque chose pour moi

MAx

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2007, 13:27

Voyez vous un autre moyen de traiter cette question ?
Oui revoir la structure de ta BD pour ne pas enregistrer plusieurs données dans un même champ !

Tu peux commencer par nous expliquer ce que tu veux réaliser.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 26 Messages

19 nov. 2007, 13:27

Bonjour,

Tu ne peux pas faire autrement que ce que tu as écris. Si tu as peur que ta requête soit trop longue et que tu veux l'optimiser, il faut commencer par optimiser ton système d'enregistrement en passant par une 2e table liée.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2007, 13:28

Modération :
max.onyx, le multipostage est interdit sur le forum !

Soit tu es en PHP5 et tu postes ici soit tu es en PHP4 et dans ce cas tu postes dans ce forum (voire même Débuter en PHP si tel est ton niveau)

Merci de prendre le temps de lire les règlements.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 13 Messages

19 nov. 2007, 15:31

Désolé pour le multi postage.

Merci de vos réponses.
Je vais me résoudre à faire une requete longue. SI SQL n'a rien prévu c'est que cela ne devrait pas ralentir la requete

Bonne journée

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2007, 15:53

SI SQL n'a rien prévu c'est que cela ne devrait pas ralentir la requete
C'est vrai quoi pourquoi avoir plein de rangements (tiroirs, placards...) dans une cuisine alors qu'il est beaucoup plus pratique de tout laisser trainer au beau milieu de celle-ci :roll:

Ce n'est pas SQL qui n'a rien prévu mais toi qui à mal modélisé ton schéma de BD :?
Les requêtes seront gourmandes dans ton cas de figure (ce que mysql à prévu est FIND_IN_SET)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

19 nov. 2007, 16:13

C'est ce qu'on appelle la normalisation.

Il serait plus intéressant d'avoir une table | PERSONNE | FRUIT | avec à chaque fois une personne et un fruit, une relation entre les deux. Une telle table indexée est bien plus rapide que de rechercher à chaque fois dans une liste de valeurs.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2007, 16:20

Aller tant qu'on y est "Normalisation".
Faut voir s'il s'agit de ralations n-n ou 1-n ...

Je ne sais pas où tu es allé chercher cette idée de tout stocker dans un même champ :?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute