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 en combinées en une seule [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
    visiteur
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : visiteur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut Requêtes sql en combinées en une seule
    Bonjour, je reviens vers vous pour une question, que je ne trouve pas sur les forums.

    C'est un peu compliquer à expliquer, mais cest pour un e-commerce.
    C'est pour mon panier le retour de mes articles. Mais les tables de ma BDD peuvents changer selon les articles.
    J'ai par exemple des tables avec nom differents:
    - animaux
    - vetements
    - bijoux etc...

    J'ai la possibilité de rajouter un nouvel article ex: "tondeuse de jardin" donc une table sera créer avec le nom ex:"machines"
    Donc ma question est comment faire une requête qui s'execute pour mes variables "$nom_de_table" de plusieurs tables

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      for($i=0 ;$i < $nbArticles ; $i++){
            require('../includes/PDO.php');
    	$req=("SELECT * FROM [=> animaux <=] * ici cette requête fonctionne avec text brut * 
            WHERE id='".$_SESSION['panier']['idprod'][$i]."'");
    	$sql=$pdo->query($req);
    	$retour=$sql->fetch(PDO::FETCH_ASSOC);
    	echo'
    	<td align="center">'.$retour['id'].'</td>';
    }
    Mais ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for($i=0 ;$i < $nbArticles ; $i++){
            require('../includes/PDO.php');
    	$req=("SELECT * FROM [=>".$_SESSION['panier']['tabbdd'][$i]." <=] * ici cette requête fonctionne pas du tout !!! * 
            WHERE id='".$_SESSION['panier']['idprod'][$i]."'");
    	$sql=$pdo->query($req);
    	$retour=$sql->fetch(PDO::FETCH_ASSOC);
    	echo'
    	<td align="center">'.$retour['id'].'</td>';
    }
    En gros il faudrai que la requête soie executée pour toutes les variables "$_SESSION['panier']['tabbdd'][$i]" en une seule requête.(si c'est possible)

    Si une bonne âme a un raisonnement ou une solution je suis preneur ! Merci
      0  0

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Il ne faut surtout pas utiliser ce modèle de bdd, c'est une aberration, et mène rapidement à des impasses comme celle à laquelle tu es confronté.

    Plutôt que 1 table par catégorie de produits, il faut faire 1 table générale avec 1 colonne catégorie.

    Actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vêtements (id, libellé, etc.)
    ---------------
    1, Pull, etc.
    2, Blouson, etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bijoux (id, libellé, etc.)
    ---------------
    1, Collier, etc.
    2, Bracelet, etc.
    Alors qu'il faudrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    produits (id, libellé, catégorie, etc.)
    ---------------
    1, Pull, Vêtement, etc.
    2, Blouson, Vêtement, etc.
    3, Collier, Bijou, etc.
    4, Bracelet, Bijou, etc.
    Ton panier n'aura qu'à stocker produits.id et une quantité, plus de noms de table à gérer, et tes requêtes interrogeront une table unique produits.



    PS : et que fait un require 'PDO.php' dans une boucle ? C'est plutôt le genre de truc qu'on met en début de script
      1  0

  3. #3
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    il faut aller plus loin.

    1- il faut une table t_categories :
    • id_categorie (INT, auto-incrément)
    • nom_categorie


    2- Et la table t_produits :
    • id_produit (INT, auto-incrément)
    • id_categorie (INT)
    • libelle_produit
    • ...


    3- la requête, avec JOINTURE SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ... 
    FROM t_produits P
    INNER JOIN t_categories T
       ON P.id_categorie = T.id_categorie
    ...
      2  0

  4. #4
    Membre averti
    Homme Profil pro
    visiteur
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : visiteur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    Bonjour et merci pour votre réponse a vous Seb et jreaux62:
    Désoler pour ma réponse tardive.
    J'avais voulu simplifier la gestions des tables,dossiers et chemin d'acces avec mon schema de tables...Mais bon on peut ce trompé

    Donc vous me proposer deux solutions différentes, mais laquelle est la meilleure ?

    Quelles est la meilleure solution sur les possibilités des requêtes (y compris une barre de recherche)?
    Quelles est la meilleure solution sur une table contenant beaucoup d'articles ?

    Jreaux62 pour aller plus loin, si j'ai bien compris pour la tab_categories on join la tab_produits avec le même id_categorie ?
    Ce qui reviens à une tab_produits et 1 colonne categorie (comme Seb la mentionné) ?
    Votre solution offre-t-elle plus de possiblités au niveau des requêtes et gestion ou simplifie a un certain niveau ?
    Si c'est le cas je suis preneur d'en savoir un peu plus !
      0  0

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Donc vous me proposer deux solutions différentes, mais laquelle est la meilleure ?
    Idéalement, pour coller aux bonnes pratiques, il faut 2 tables : produits et catégories, et faire une jointure pour récupérer le libellé, comme illustré par jreaux62
    Au prix de la gestion de la table supplémentaire cela permet une maintenance simplifiée, une bonne finesse et une bonne évolutivité (ex. des catégories de catégories, des données supplémentaires, un affichage spécifique selon d'autres colonnes)

    Bon après si ta table catégories finit avec 4 enregistrements qui se battent en duel il est plus simple d'utiliser une colonne produits.catégorie ENUM('Vêtements', 'Bijoux', etc.), c'est le cas type d'une colonne utilisateurs.statut ENUM('Actif', 'Inactif') => J'ai pas envie de créer une table pour 2 lignes
    Ceci dit, rien que récupérer la liste des catégories est déjà plus difficile et te force à faire une requête peu naturelle (SELECT DISTINCT catégorie FROM produits) (ce qui n'est pas grave si tu as peu de produits ou un index)

    Voilà, donc je dirais, à toi de voir

    (Perso je prendrais 2 tables, plus haut l'exemple simpliste avait pour objectif unique d'illustrer le principe de la table unique de produits)
      2  0

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Je suis d'accord avec moi-même.

    Ex. d'inconvénient d'une seule table produit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    produits (id, libellé, catégorie, etc.) --------------- 
    1, Pull, Vêtement, etc. 
    2, Blouson, VETEMENT, etc.
    3, Blazer, Vetement, etc.
    Vêtement - VETEMENT - Vetement : sont considérés comme différents !

    Alors qu'avec 2 tables, plus de problème.
    Même avec seulement 2, 3 ou 4 catégories.

    N.B. et que dire, si le site est multilingue ?
      2  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  2. [Requête SQL]Trop longue pour une ligne
    Par jbulysse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 14h27
  3. Réponses: 15
    Dernier message: 27/08/2007, 15h42
  4. [Débutant][SQL] Requête SQL à l'intérieur d'une requête SQL
    Par Kily10 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/10/2006, 11h54
  5. Fusionner 3 requêtes avec un SUM en une seule
    Par David Guillouet dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2004, 15h54

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