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 sql imbriquées [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2011
    Messages : 13
    Par défaut Requêtes sql imbriquées
    Bonjour,

    j'aimerais faire fonctionner une requête sql a partir d'une info récupéré dans une autre.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?
    // On récupère tout le contenu de la table categories
    $categories = $bdd->query('SELECT * FROM categories');
     
    // boucle pour pouvoir afficher une à une les catégories
    while ($categorie = $categories->fetch())
    {
    ?>
    	<article class="containerMenu">
    		<!-- affichage de la catégorie -->
    		<dl><? echo $categorie['description']; ?></dl>
     
    <?	
    	$rqt = 'SELECT * FROM produits WHERE ID_Cat = '.$categorie['ID'];
    	$produits = $bdd->querry($rqt);
     
    	// boucle pour pouvoir afficher une à une les informations de chaque produit
    	while ($produit = $produits->fetch())
    	{
    ?>			<!-- affichage des infos produit -->
    			<dt title="<? echo $produit['description']; ?>"><? echo $produit['nom']; ?></dt>
    			<dd><? echo $produit['prix']; ?>€</dd>
    <?	
    	}
    	$produits->closeCursor(); // Termine le traitement de la requête
    	echo '</article>';
    } 
    $categorie->closeCursor(); // Termine le traitement de la requête
    ?>
    Je pense qu'il faut utiliser la fonction prepare(), avec quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $produits = $bdd->querry('SELECT * FROM produits WHERE ID_Cat = ? ');
    Mais j'ai pas vraiment tout bien comprit au principe ... si vous pouviez éclairer ma lanterne, ca serrait cool.
    ( pas besoin dun message ' RTFM -> /pdo.prepare.php' j'ai lut, j'ai pas tout pigé ^^)

    Au passage, je suis pas sur d'utiliser comme il faut le closeCursor(), si vous pouviez me corriger au cas ou.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Qu'est ce ne va pas avec ton code actuel (en dehors du querry au lieu de query) ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2011
    Messages : 13
    Par défaut
    haaaaaaaaaaa

    bha rien juste cette jolie faute de frappe !!!!

    MERCCCCCCIII.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec une requête préparée, ce qui n'est pas une mauvaise idée, ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    $rqt = 'SELECT * FROM produits WHERE ID_Cat = :categorie';
    $sth_produit = $bdd->prepare($rqt);
     
    // On récupère tout le contenu de la table categories
    $categories = $bdd->query('SELECT * FROM categories');
     
    // boucle pour pouvoir afficher une à une les catégories
    while ($categorie = $categories->fetch())
    {
    ?>
    	<article class="containerMenu">
    		<!-- affichage de la catégorie -->
    		<dl><? echo $categorie['description']; ?></dl>
     
    <?php
     
    $sth_produit->execute(array(':categorie'=>$categorie['ID']));
     
    	while ($produit = $sth_produit->fetch(PDO::FETCH_ASSOC))
    	{
    ?>			<!-- affichage des infos produit -->
    			<dt title="<? echo $produit['description']; ?>"><? echo $produit['nom']; ?></dt>
    			<dd><? echo $produit['prix']; ?>€</dd>
    <?	
    	}
    	echo '</article>';
    } 
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2011
    Messages : 13
    Par défaut
    Merci bien, vue qu'il risque d'y avoir pas mal d'info, voir d'autre imbrication, je vais prendre ta solution avec les requêtes préparé.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Attention quand même les requêtes dans des boucles ce n'est pas terrible en performance.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Estragon007
    pas besoin dun message 'RTFM'
    C'était pourtant la bonne solution dans ton cas !

    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2011
    Messages : 13
    Par défaut
    Citation Envoyé par Exia93 Voir le message
    Bonjour,

    une jointure simple serait mieux je pense :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c.ID_Cat, -- Listes des colonnes nécessaire à la requête mais pas *
    FROM categories c
    INNER JOIN produits p ON c.ID_Cat = p.ID_Cat
    ORDER BY c._ID_Cat

    Un petit article sur les jointures par SQLPro si tu ne comprend pas bien le principe ou comment utiliser les jointures sa pourra t'aider.

    Ensuite il te suffira de traitrer chaque enregistrement de ta requête SQL pour l'affichage.
    En fait non car le reste me sert aussi.

    Citation Envoyé par Bovino Voir le message
    C'était pourtant la bonne solution dans ton cas !

    Je pense qu'il me faut surtout changer de lunette ...
    Ho wait je les ai changé la semaine dernière ... ma vie est foutu :-(
    xD

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Citation Envoyé par Estragon007 Voir le message
    En fait non car le reste me sert aussi.
    Quand tu parle de reste tu veut dire les catégories qui ne sont pas présente dans la table produits ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c.ID_Cat, -- Listes des colonnes nécessaire à la requête mais pas *
    FROM categories c
    LEFT OUTER JOIN produits p ON c.ID_Cat = p.ID_Cat
    ORDER BY c._ID_Cat

    Jointure externe je te laisse regarder le cours d'SQLPro pour voir à quoi elle sert.

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

Discussions similaires

  1. Requêtes SQL imbriquées
    Par zpliz dans le forum SQL
    Réponses: 5
    Dernier message: 25/03/2010, 09h58
  2. [MySQL] Requête sql imbriquée
    Par PIEPLU dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/01/2010, 08h44
  3. Requête SQL imbriqué, 3 tables, plusieurs colonnes
    Par opacho dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/07/2009, 09h45
  4. Requête SQL imbriquée
    Par cecile15 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/05/2009, 10h39
  5. Requête SQL imbriquées
    Par Fanette85 dans le forum ASP.NET
    Réponses: 20
    Dernier message: 05/10/2007, 14h12

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