IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requête mysql avec condition à élaborer à partir d'un tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 184
    Par défaut requête mysql avec condition à élaborer à partir d'un tableau
    Bonjour,

    Voilà je souhaiterai faire une requête SELECT selon un id qui va prendre toutes les valeurs d'un array, mettons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_array = array["1", "3", "35", "56"];
    Est-il possible en une seule ligne de code de faire la requête des enregistrements
    correspondant à chaque index de l'array ci-dessus pour la valeur du champ id?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "SELECT * FROM ma_table WHERE id = ...";
    $result=mysql_query($query,$connect) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    Merci.

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    En une seule ligne de code je ne pense pas. Il va falloir ajouter les critères un a un à ta requete en bouclant sur le tableau $id_array

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    si je comprend bien tu fais qu'il fasse automatique une requete pour tous les id de ton tableau ?

    Pour l'exemple tu dois connaitre auparant le nb de cases dans ton tableau ( j'ai fais simple )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ($i=0;$i<NbCasesTableau;$i++) {
    $id=$id_array[i];
    $query = "SELECT * FROM ma_table WHERE id = '$id' ";
    $result=mysql_query($query,$connect) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    }
    Si c'est pas ce que tu voulais détail un peu stp

  4. #4
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $id_array = array["1", "3", "35", "56"];
     
    $filtre = "";
    foreach ($id_array as $value) {
        if($filtre!=""){
            $filtre = " OR `id`=".$value;
        }else{
            $filtre = "`id`=".$value;
        }
    }
     
    $query = "SELECT * FROM `ma_table` WHERE ".$filtre;

  5. #5
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    le OR est un des operateurs les moins efficace sur a peu pres tout les SGBDR

    je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $id_array = array["1", "3", "35", "56"];
     
     
    $query = 'SELECT * FROM `ma_table` WHERE id IN ('.implode(',', $id_array).')';

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    ah.. je ne savais pas qu'on pouvait utiliser le IN de cette façon

  7. #7
    Membre Expert
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Par défaut
    Bonjour,
    l'idee de stunti est la bonne. Par contre je ne suis pas sur qu'elle fonctionne comme cela car ce sont des double quotes et non des simple qu'il faut utiliser dans un implode()

    voila ce que je te propose:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $id_array = array["1", "3", "35", "56"];
    $ids = implode(",", $id_array)
     
    $query = 'SELECT * FROM ma_table WHERE id IN ('.$ids.')';

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    ça ne joue pas puisque c'est notamment une concaténation ...

    (d'autre part, il y avait une erreur sur la déclaration du tableau.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $id_array = array('1', '3', '35', '56'); // A la rigueur les quotes peuvent être supprimées
     
    $query = 'SELECT * FROM `ma_table` WHERE id IN (' . implode(',', $id_array) . ')';
    echo $query;
    On obtient bien :
    SELECT * FROM `ma_table` WHERE id IN (1,3,35,56)

  9. #9
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    A se concentrer sur la requete on en oublie le reste.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 184
    Par défaut
    Merci à tous, et en particulier à Stunti mon Sauveur!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Mettre des conditions dans une requête mysql avec pdo
    Par shima5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2010, 21h11
  2. [MySQL] requêtes mysql avec php
    Par youness78 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/07/2007, 16h37
  3. Problème de requête MYSQL avec plusieurs limit
    Par Super_baloo8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h35
  4. Requête Access avec condition IIF
    Par SuperNav77 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/01/2007, 22h54
  5. [MySQL] concaténer une requête sql avec condition
    Par maliak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/02/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo