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 :

Problème requètes sur 2 tables [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut Problème requètes sur 2 tables
    Bonjour/soir

    Bon d'après le titre pas très explicite, je pense que vous vous dite que c'est une question bidon etc et bien oui probablement pour certain d'entre vous (je l'espère) cette question sera résolu en 2 minutes en 35 secondes..

    Pour ma part cela fait 8h et toujours pas de réponse

    Voila mon souci:
    j'ai 2 tables distinct dont voici la structure
    Table 1: cmd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cmd_id | user_id | User_name 
    1      | 1       | Random name 
    2      | 1       | Random name
    Table 2: item_cmd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cmd_id | Item_id | item_name | qty | comment 
    1      |  random  | Nom item  | 526 | commentaire 
    1      |  random  | Nom item2 |  26 | commentaire2 
    1      |  random  | Nom item3 |  56 | commentaire3 
    2      |  random  | Nom item  |   6 | commentaire
    Ma requete SQL maintenant:
    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
    30
    31
    global $context;
    //// Recup des commandes
    $req=("SELECT CMD.cmd_id,
    				CMD.user_id,
    				CMD.user_name,
    				ICMD.item_id,
    				ICMD.item_name,
    				ICMD.qty,
    				ICMD.comment
    			FROM swc.cmd as CMD
    			JOIN swc.item_cmd as ICMD
    			ON CMD.cmd_id = ICMD.cmd_id
    			;
    			");
    $execreq=ExecRequete($req,$Connexion);
     
     
    while ($row = mysql_fetch_assoc($execreq)) {
     
    	$context['cmd'][] = 
    	array (
    	'cmdid' => $row["cmd_id"],
    	'uid' => $row["user_id"],
    	'uname' => $row["user_name"],
    	'iid' => $row["item_id"],
    	'iname' => $row["item_name"],
    	'qty' => $row["qty"],	
    	'com' => $row["comment"]		
    	);
     
    }
    En faisant un print_r($context['cmd']);
    j'obtiens ceci:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Array
    (
        [0] => Array
            (
                [cmdid] => 1
                [uid] => 1
                [uname] => Nameuserd
                [iid] => 
                [iname] => itemnameI
                [qty] => 78
                [com] => Test item com
            )
     
        [1] => Array
            (
                [cmdid] => 1
                [uid] => 1
                [uname] => Nameuser
                [iid] => 
                [iname] => item2
                [qty] => 1
                [com] => com2
            )
     
        [2] => Array
            (
                [cmdid] => 1
                [uid] => 1
                [uname] => Nameuser
                [iid] => 
                [iname] => item3
                [qty] => 1
                [com] =>  Testing
            )
     
        [3] => Array
            (
                [cmdid] => 2
                [uid] => 1
                [uname] => Nameuser
                [iid] => 
                [iname] => erker
                [qty] => 85
                [com] => test2
            )
     
    )
    Or cela ne me conviens pas.

    Pourquoi?
    J'aimerai au final pouvoir avec 1 array par cmd_id distinct.

    En gros, quand un user passe une commande, il ecrit dans la table1 (cmd) l'id de la commande, son id et son nom.

    Puis il ecrit dans la table2 (item_cmd) l'id de la cmd, l'id de l'item, le nom de l'item, la quantité et u commantaire et ceci pour chaque item. (si il commande 3 items il y aura 3 lignes donc 3 fois l'id de la cmd)

    Mon problème se pose ici, je n'arrive pas a récupérer les donné que je veux.

    Je voudrai faire un tableau par cmd_id distinct mais mon code me créer 1 table pour chaque cmd_id de ma table2. dans l'exemple que je vous donne il me créer 4 tableau or je n'es que 2 commandes (je voudrai donc avoir que 2 tableau.)

    Je vous ce que je voudrai comme array:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Array
    (
        [0] => Array
            (
                [cmdid] => 1
                [uid] => 1
                [uname] => Nameuserd
                [iid] => array(
                                [0] =>
                                [1] =>
                                [2] =>
                 )
                [iname] => array(
                                [0] => itemnameI
                                [1] => item2
                                [2] => item3
                 )
                [qty] => array(
                                [0] => 78
                                [1] => 1
                                [2] => 1
                 )
                [com] => array(
                                [0] => Test item com 
                                [1] => com2
                                [2] => Testing
            )
     
     
        [1] => Array
           [cmdid] => 2
                [uid] => 1
                [uname] => Nameuser
                [iid] => array(
                                [0] =>
                 )
                [iname] => array(
                                [0] => erker
                 )
                [qty] => array(
                                [0] => 85
                 )
                [com] => array(
                                [0] => test2 
            )
     
    )
    Je ne sais pas si ce que je demande est possible ou non?

    Merci d'avance pour votre aide et aussi pour avoir lu mon post incompréhensible jusqu'au bout

    Cdlt!

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Si c possible ...

    Il faut dans ton While qd tu lis toutes les lignes de ta jointure modifier le code en fonction du champ '[cmdid]'.

    Donc, tu gardes ta jointure, dans ton while tu testes en plus les valeurs '[cmdid]' en fonction du précédent et si différent tu passes à l'index suivant du tableau. (Pour cela tu passes par une variable intermédiaire) (et il vaut mieux un do-while).

    Code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $row = mysql_fetch_assoc($execreq); // test à faire si vide ou die
    $prec = $row["cmd_id"];
    do {
        // le traitement défini ci-dessus, à toi de fignoler
    } while ($row = mysql_fetch_assoc($execreq));

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour moi le plus simple, c'est d'indexer le tableau par cmdid de créer ou de compléter les lignes
    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
    $tab = array();
    while ($row = mysql_fetch_assoc($execreq)) 
    {
    	// si aucun enregistrement n'a été trouvé pour ce cmd_id, on créé une ligne
    	if (!isset($tab[$row["cmd_id"]])
    	{
    		$tab[$row["cmd_id"]] = 
    		array (
    		'cmdid' => $row["cmd_id"],
    		'uid' => $row["user_id"],
    		'uname' => $row["user_name"],
    		'iid' => array($row["item_id"]),
    		'iname' => array($row["item_name"]),
    		'qty' => array($row["qty"]),	
    		'com' => array($row["comment"])		
    		);
    	}
    	// sinon on complète la ligne existante
    	else
    	{
    		$tab[$row["cmd_id"]]['iid'][] = $row["item_id"];
    		$tab[$row["cmd_id"]]['iname'][] = $row["item_name"];
    		$tab[$row["cmd_id"]]['qty'][] = $row["qty"];
    		$tab[$row["cmd_id"]]['com'][] = $row["comment"];
    	}
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/07/2011, 08h51
  2. Problème requête sur trois tables
    Par marcuzzz dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/09/2010, 20h17
  3. [AC-2007] Problème requête sur 1 table en passant par une association
    Par ganon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/08/2009, 15h33
  4. [SQL] Problème requête sur 2 tables
    Par temperature dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/04/2006, 12h05
  5. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06

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