Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1589 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Problème avec requête et condition IN

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Problème avec requête et condition IN

n°1483528
Ben-o
Posté le 29-11-2006 à 10:10:36  profilanswer
 

Bonjour, je rencontre un problème avec le traitement d'une chaine de caractères.
 
Je récupère les données d'une liste déroulante à choix multiples de cette manière:
 

Code :
  1. $secteurs = implode(',' , $_POST["secteurs"]);


 
Le résultat obtenu est de cette forme:
 
19,13,5,24
 
je voudrais isoler chaque résultat afin de les intégrer dans une requête.
 
Par exemple:
 

Code :
  1. $secteur_1 = 19
  2. $secteur_2 = 13
  3. $secteur_3 = 5
  4. $secteur_' = 24


 
Je ne sais pas si c'est possible.
 
Merci pour votre aide.


Message édité par Ben-o le 01-12-2006 à 14:34:08
mood
Publicité
Posté le 29-11-2006 à 10:10:36  profilanswer
 

n°1483531
Chaos Inte​stinal
Posté le 29-11-2006 à 10:13:42  profilanswer
 

En gros, tu commences par concaténer des valeurs individuelles (stockées dans un tableau) avec implode, et ensuite tu voudrais les séparer ? [:petrus dei]

 

Je saisis pas la logique...


Message édité par Chaos Intestinal le 29-11-2006 à 10:18:41
n°1483533
gatsu35
Blablaté par Harko
Posté le 29-11-2006 à 10:14:55  profilanswer
 

tu sais ce que tu fais, tu es sur [:petrus dei]
 
$secteurs = implode(',' , $_POST["secteurs"]);  == là tu recuperes toutes les valeurs d'un array pour les mettres dans une string séparés par une ,
 
au lieu de faire ca, tu fais une putain de  boucle for et tu boucle sur le tableau $_POST["secteurs"];
 

Code :
  1. $sectors = $_POST["secteurs"]
  2. for ($i=0; $i....) {
  3. $sectors[i] ....
  4. }


 
 et au lieu de les mettres dans $secteur_1...  (ce qui est stupide)
 
tu créé ta requete pour générer une string directement [:mlc]

n°1483548
Ben-o
Posté le 29-11-2006 à 10:26:23  profilanswer
 

C'est vrai que la logique et moi ça fait 2, merci à vous en tout cas.

n°1483549
FlorentG
Unité de Masse
Posté le 29-11-2006 à 10:26:51  profilanswer
 

Ben-o a écrit :

C'est vrai que la logique et moi ça fait 2, merci à vous en tout cas.


Ca viendra avec le temps et la pratique :)

n°1483550
Chaos Inte​stinal
Posté le 29-11-2006 à 10:27:56  profilanswer
 

FlorentG a écrit :

Ca viendra avec le temps et la pratique :)


 
+1.
Ben-o, tu seras pas le premier à te rendre compte avec un peu de recul que t'as fait un truc tordu ou illogique, je pense que c'est arrivé à tout le monde ;)

n°1483571
Ben-o
Posté le 29-11-2006 à 10:59:20  profilanswer
 

Vous me rassurez :)
 
Par contre pouvez-vous m'écrire le code de la boucle en entier, j'ai pas tout saisi en fait.
 
Je vais avoir:
 

Code :
  1. $secteurs = $_POST["secteurs"];
  2. for ($i = 0; $i (là je ne sais pas quoi mettre?) ) {
  3. $secteurs[i] (je ne sais pas quoi mettre là non plus?)
  4. }


 
Je n'ai compris ceci non plus:
 
"et au lieu de les mettres dans $secteur_1...  (ce qui est stupide) tu créé ta requete pour générer une string directement [:mlc] "
 
 
J'avais également trouvé ce code sur internet:
 

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2. if (!empty ($tabsecteurs)){
  3. foreach ($tabsecteurs as $secteurs) {
  4.  //echo $secteurs;
  5. }
  6. }


 
Lequel est-il préférable d'utiliser?
 
Encore merci pour votre aide.  :)

n°1483591
FlorentG
Unité de Masse
Posté le 29-11-2006 à 11:17:56  profilanswer
 

Le foreach est très bien

n°1483599
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 11:23:37  profilanswer
 

Ben-o, c'était pas la peine de créer 2 topics. Je t'ai déjà dis comment fallait construire ta requête sql...où alors, j'ai mal compris ce que tu voulais faire...

n°1483609
Ben-o
Posté le 29-11-2006 à 11:27:16  profilanswer
 

Ok, donc si j'utilise une boucle foreach, comment puis-je faire pour isoler les résultats retournés, car si je fais par exemple:
 

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2.      if (!empty ($tabsecteurs)){
  3.           foreach ($tabsecteurs as $secteurs) {
  4.                echo $secteurs[0];
  5.           }
  6.      }


 
echo $secteurs[0] me renvoie le premier caractère de chaque résultat, par exemple "11" si les résultats étaient "19,13"
 
Le problème est que je peux avoir des résultats à 1,2 ou 3 caractères.
 
Je ne sais pas comment faire.

mood
Publicité
Posté le 29-11-2006 à 11:27:16  profilanswer
 

n°1483616
FlorentG
Unité de Masse
Posté le 29-11-2006 à 11:28:59  profilanswer
 

C'est juste echo $secteurs (mais t'as oublié le explode)

n°1483625
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 11:32:00  profilanswer
 

Ben-o a écrit :

Ok, donc si j'utilise une boucle foreach, comment puis-je faire pour isoler les résultats retournés, car si je fais par exemple:
 

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2.      if (!empty ($tabsecteurs)){
  3.           foreach ($tabsecteurs as $secteurs) {
  4.                echo $secteurs[0];
  5.           }
  6.      }


 
echo $secteurs[0] me renvoie le premier caractère de chaque résultat, par exemple "11" si les résultats étaient "19,13"
 
Le problème est que je peux avoir des résultats à 1,2 ou 3 caractères.
 
Je ne sais pas comment faire.


 
 

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2.      if (!empty ($tabsecteurs)){
  3.           foreach ($tabsecteurs as $i => $CurrentSecteur) {
  4.                echo $CurrentSecteur;
  5.                // ou on peut faire un echo $tabsecteurs[$i]
  6.           }
  7.      }

n°1483643
Ben-o
Posté le 29-11-2006 à 11:52:54  profilanswer
 

Merci et désolé pour la création des 2 topics, mais j'ai du mal avec tout ça. Je vais me pencher sur vos réponses et tâcher de m'en sortir.

n°1483741
Ben-o
Posté le 29-11-2006 à 14:29:31  profilanswer
 

La où je bloque en fait, pour reprendre l'autre topic http://forum.hardware.fr/hfr/Progr [...] 8758_1.htm, c'est au niveau de la condition IN.
 
Pour reprendre, mon formulaire de recherche est donc composé de 2 listes déroulantes et d'une liste déroulante à choix multiple.
 
1 liste déroulante pour le prix
1 liste déroulante pour la catégorie du bien
et 1 liste à choix multiple donc pour les secteurs
 
Dans mon fichier de traitement, j'ai ceci:
 
La première partie de ma requête:

Code :
  1. $query = "SELECT t_maison.photo1,
  2.  t_type.type,
  3.  t_secteur.secteur,
  4.  t_categorie.categorie,
  5.  t_maison.no_asp,
  6.  t_maison.prix,
  7.  t_maison.cp_internet,
  8.  t_maison.ville_internet,
  9.  t_maison.nb_chambres,
  10.  t_maison.surf_hab,
  11.  t_maison.surf_terrain,
  12.  t_maison.prestige
  13.  FROM t_type,
  14.  t_secteur,
  15.  t_maison,
  16.  t_categorie,
  17.  t_mandat
  18.  WHERE t_maison.idx_type_mandat = t_mandat.id_mandat
  19.  AND (t_maison.idx_type_mandat = '1'
  20.  OR t_maison.idx_type_mandat = '2'
  21.  OR t_maison.idx_type_mandat = '3')
  22.  AND t_maison.idx_type_offre = '2'
  23.  AND t_maison.idx_type_offre = t_type.id_type_offre
  24.  AND t_maison.idx_secteur = t_secteur.id_secteur
  25.  AND t_maison.idx_categorie = t_categorie.id_categorie";


 
La partie pour le prix:

Code :
  1. if ($_POST["prix"] == 'prix_1') {
  2.  $result_requete_prix = " AND t_maison.prix <= 75000";
  3. }
  4. elseif ($_POST["prix"] == 'prix_2') {
  5.  $result_requete_prix = " AND t_maison.prix > 75000 AND t_maison.prix < 150000";
  6. }...


 
La partie pour la catégorie:

Code :
  1. if ($_POST["categorie"] == 'bastide') {
  2.  $result_requete_categorie = " AND t_maison.idx_categorie = '1'";
  3. }
  4. elseif ($_POST["categorie"] == 'bergerie') {
  5.  $result_requete_categorie = " AND t_maison.idx_categorie = '2'";
  6. }
  7. elseif ($_POST["categorie"] == 'cave') {
  8.  $result_requete_categorie = " AND t_maison.idx_categorie = '3'";
  9. }...


 
Et enfin la partie que j'avais avant pour les secteurs:

Code :
  1. if ($_POST["secteurs"] == 'cne') {
  2.  $result_requete_secteurs = " AND (t_maison.idx_secteur = '1' OR t_maison.idx_secteur = '2')";
  3. }
  4. elseif ($_POST["secteurs"] == 'ne') {
  5.  $result_requete_secteurs = " AND (t_maison.idx_secteur = '8' OR t_maison.idx_secteur = '9')";
  6. }...


 
Ensuite j'assemblais tout ça de cette manière:

Code :
  1. $query_final = $query.$result_requete_prix.$result_requete_secteurs.$result_requete_categorie;
  2. $reponse = mysql_query($query_final);...


 
Ce n'est certainement pas la meilleure méthode, mais ça fonctionne.
 
Avec une boucle foreach et la condition IN, je ne peux donc plus utiliser le même système pour construire ma requête, et c'est précisément là que je bloque. Je ne vois pas comment faire.
 
Encore merci pour votre aide.  :sweat:  :)

n°1483912
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 18:28:37  profilanswer
 

tu devrais déjà regarder la syntaxe d'une requête SQL qui contient une clause IN (cf doc de MySQl par ex). Ca va déjà t'orienter sur ce que tu dois faire...

n°1483922
Ben-o
Posté le 29-11-2006 à 18:50:46  profilanswer
 

J'ai bien trouvé ça sur la doc http://dev.mysql.com/doc/refman/5. [...] ators.html, mais je n'arrive pas à le mettre en place.
 
J'ai essayé comme ça:
 

Code :
  1. $result_requete_secteurs = " IN (".implode(',', $_POST["secteurs"])." )";


 
afin de conserver la structure de ma requête.
 
J'ai donc toujours comme requête finale:  
 

Code :
  1. $query_final = $query.$result_requete_prix.$result_requete_categorie.$result_requete_secteurs.$tri;
  2. $reponse = mysql_query($query_final);


 
Ca ne marche pas, je n'ai pas d'erreur, mais voilà ce que me renvoi echo $query_final:
 

Code :
  1. SELECT t_maison.photo1, t_type.type, t_secteur.secteur, t_categorie.categorie, t_maison.no_asp, t_maison.prix, t_maison.cp_internet, t_maison.ville_internet, t_maison.nb_chambres, t_maison.surf_hab, t_maison.surf_terrain, t_maison.prestige FROM t_type, t_secteur, t_maison, t_categorie, t_mandat WHERE t_maison.idx_type_mandat = t_mandat.id_mandat AND (t_maison.idx_type_mandat = '1' OR t_maison.idx_type_mandat = '2' OR t_maison.idx_type_mandat = '3') AND t_maison.idx_type_offre = '2' AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = t_secteur.id_secteur AND t_maison.idx_categorie = t_categorie.id_categorie AND (t_maison.idx_categorie = '1' OR t_maison.idx_categorie = '2' OR t_maison.idx_categorie = '3' OR t_maison.idx_categorie = '4' OR t_maison.idx_categorie = '5' OR t_maison.idx_categorie = '6' OR t_maison.idx_categorie = '7' OR t_maison.idx_categorie = '8' OR t_maison.idx_categorie = '9' OR t_maison.idx_categorie = '10' OR t_maison.idx_categorie = '11' OR t_maison.idx_categorie = '12' OR t_maison.idx_categorie = '13' OR t_maison.idx_categorie = '14' OR t_maison.idx_categorie = '15' OR t_maison.idx_categorie = '16' OR t_maison.idx_categorie = '17' OR t_maison.idx_categorie = '18' OR t_maison.idx_categorie = '19' OR t_maison.idx_categorie = '20' OR t_maison.idx_categorie = '21' OR t_maison.idx_categorie = '22' OR t_maison.idx_categorie = '23' OR t_maison.idx_categorie = '24') IN (21,28,14,8,9,3 ) ORDER BY prix


 
Merci d'avance.

n°1484061
rufo
Pas me confondre avec Lycos!
Posté le 30-11-2006 à 09:56:34  profilanswer
 

ben devant le IN, faudrait tout de même préciser quel champ doit avoir les valeurs précisées dans le IN. Et vire moi tous ces OR et remplaces les par des IN (ou des EXISTS).
 
http://www.1keydata.com/sql/sqlin.html

n°1484148
Ben-o
Posté le 30-11-2006 à 11:22:07  profilanswer
 

Merci Rufo, je teste ça


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Problème avec requête et condition IN

 

Sujets relatifs
[PHP/MySql] [Resolu merci !]Insertion de données temporaire.problème de 'quote' dan sune syntaxe XML
Problème de connexion a une base de donnée VBA AccessProbleme de Pop Up sous Internet Explorer
Problème de fond de cellule dans une newsletterProblème avec gestion de frames
[MySQL] Limiter la taille du processus mySQL[SQL] Besoin d'aide sur les attributs pour une requete
[SGBD/SQL] lenteur mysql/windowsRêquete d'un débutant
Plus de sujets relatifs à : [MySQL] Problème avec requête et condition IN


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR