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êtes imbriquées MySQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut Requêtes imbriquées MySQL
    Bonjour,
    J'ai deux tables qui représentent deux catégories, l'une primaire et l'une secondaire. C-à-d que les valeurs de la table cat. secondaire sont des sous-éléments de la catégorie primaire.

    Ex.:
    cat. primaire | cat. secondaire
    -----------------------------------
    Voiture VW
    Voiture BMW
    Voiture Peugeot
    Voiture Citroen
    Moto Vespa
    Moto Suzuki

    Ma question: j'aimerais afficher deux éléments de la catégorie secondaire (au hasard, peu importe lesquels) pour chaque catégorie primaire. C-à-d dans notre cas p.ex. Voiture: VW, Peugeot; Moto: Vespa, Suzuki, etc.

    J'ai lancé une requête listant toutes les catégories primaires puis dans la boucle while, j'ai de nouveau effectué une requête, cette fois pour lister deux éléments secondaires appartenant à la cat. primaire. Voici le pseudo-code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($prim = mysql_fetch_array($query_primaire)) { 
     $query_secondaire = mysql_query('SELECT * FROM cat_secondary WHERE cat_primary=$prim['cat_primary'] ORDER BY RAND() LIMIT 0,2');
    // Ensuite affiche les résultats
    }
    Le code fonctionne mais ne me paraît pas très optimisé du point de vue des requêtes (lancer 1 + #cat_primaires requêtes me paraît exageré) donc je voulais savoir si quelqu'un avait une idée plus simple pour résoudre ce problème?

    Merci!
    Mike

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Salut,

    Tu peux faire une seul requête en utilisant un left join,

    select * from cat_secondary left join cat_primary on............ where....

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut
    Salut,
    Oui une requête JOIN serait l'idéal mais cela ne me limite pas à 2 requêtes pour chaque cat_secondary appartenant à cat_primary. Il me renverra TOUTES les secondes catégories et les catégories primaires associées.
    Et si je fais un LIMIT 0,2 alors il ne me renverra que deux réponses au total! Alors que j'aimerais deux réponses (cat_secondary) pour chaque cat_primary.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Nan si dans la condition de ta requete tu precise where cat_primary.i='ce que tu veux', avec une limite à deux il va ta ressortir uniquement deux categorie secondaire correspondant à la catégorie primaire indiqué

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut
    Je viens d'essayer ceci:
    SELECT * FROM `cat_primary` LEFT JOIN cat_secondary USING(id_cat_primary) WHERE id_cat_primary = 1 LIMIT 2

    et j'obtiens comme tu le dis, 2 cat_secondary par cat_primary.

    Maintenant, j'aimerais avoir cela pour chaque cat_primary (il y en a une 15aine en tout donc je voudrais une 30aine de résultats en tout).
    On pourrait mettre la requête citée plus haut dans une boucle mais ça ferait beaucoup de demandes au serveur MySQL!
    Qq'un a-t-il une autre solution?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Je ne suis pas sur que ce que tu veuille faire soit faisable sans faire une boucle, ou alors tu fais une seul requête qui te ramene tout les categorie avec leur sous categorie et tu avec mysql_data_seek et une variable aleatoire, quand tu tombes sur une meme categorie si tu as dejà deux sous catégorie tu ne prend pas en compte la ligne, je sais pas si j'explique tres bien mais sa serai un peu fastidieux comme methode

Discussions similaires

  1. Requête imbriquée sous MySQL
    Par hakim_vb dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/07/2010, 17h12
  2. [MySQL] Problème de requête imbriquée (mysql) & php
    Par niacinside dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/05/2008, 10h59
  3. [MySQL 4.0.15] Erreur requête imbriquée
    Par X-K4l1 dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/07/2006, 15h45
  4. [mysql et php] requêtes imbriquées
    Par php_de_travers dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/04/2006, 22h46
  5. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37

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