PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-12-2011 12:29:28

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Probleme de mise en place d'un select

Bonjour,

J'ai des difficultés à mettre en codage le select que je souhaite.
En effet j'ai trois tables

1) Groupes
-idGoupe
-descGroupe

2) Groupes_has_Fonctionnalites
-idGroupe
-idFonctionnalites

3) Fonctionnalites
-idFonctionnalites
-descFonctionnalites

Je souhaiterais pourvoir afficher dans un tableau
IdGroupe | descGroupe | et toutes les fonctions qui appartiennent a ce groupe
                                      idFonc | descFonc

aussi j'ai commencé à mettre cela en page mais je n'arrive qu'a récupérer soit les groupes soit les fonctionnalités mais pas les fonctionnalités appartenant à chaque groupe


SELECT idFonc, descFonc, idGroupe, descGroupe FROM Groupes AS G, Fonctionnalites AS F WHERE ...

 

quelqu'un pourrait m'aider please?
Merci d'avance

Hors ligne

#2 09-12-2011 12:52:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Saluton,
J'ai déplacé ton post vers le forum des SGBD.
Essaye comme cela, ça devrait aller mieux.

SELECT G.idGroupe, descGroupe, F.idFonc, descFonc
FROM Groupes AS G
INNER JOIN Groupes_has_Fonctionnalites AS GHF
    USING(idGroupe)
INNER JOIN Fonctionnalites AS F
    USING(idFonctionnalites)
WHERE ...
ORDER BY G.idGroupe,F.idFonc

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 09-12-2011 13:27:49

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

bonjour maljuna,

merci pour ton retour qui m'a fais avancé dans la mse en place de ce select.
milles excuces par ailleurs pour avoir posté sur le mauvais forum.

Toutefois j'ai bien adapté ton code mais cela me donne par un var_dump
array
  0 => resource(23, mysql result)
  1 => resource(23, mysql result)

kesako?

Hors ligne

#4 09-12-2011 13:34:23

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Ben, sans voir le code PHP à l'origine de ce var_dump, je ne me risquerais pas au moindre diagnostic.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 09-12-2011 13:37:01

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select


function get_fonc_group(){
$db = new DB;
$groups_foncs= array();
$get_fonc_group = $db->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
while($fonc_group = mysql_fetch_assoc($get_fonc_group))
{$groups_foncs[] = $get_fonc_group;
}
return $groups_foncs;
$db->cnx_close();
}
 

puis


$fonc_group =$util->get_fonc_group();
var_dump($fonc_group];
 

une idée docteur? smile

Hors ligne

#6 09-12-2011 14:16:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Tu passes par quoi pour générer ton instance de new DB ?
Comme je n'utilise plus que PDO, je suis un peu largué, là.
Bon je vois bien que ta fonction est, en fait, une méthode d'un objet $util, ça, ça ne me gêne pas, mais c'est l'utilisation de mysql_fetch_assoc sur un resource de $db->query qui m'embrouille.
P----n ! comment que j'me fais vieux !


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 09-12-2011 14:20:54

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

bah par ma classe smile


   public function __construct() {
     
     
     $this->cnx=mysql_connect($this->Serveur, $this->Identifiant, $this->Mdp);
      if (!$this->cnx && $this->Debogue)  throw new Exception ('Erreur de connexion au serveur MySql');
 
       $Base = mysql_select_db($this->Bdd);
            if (!$Base && $this->Debogue) throw new Exception ('Erreur de connexion à la base de donnees!!!');
    }
 

pour query


public function query($query) {

if(!$Result = mysql_query($query)){
try  {
throw new MyException(mysql_error());
}
catch (MyException $myException)
{
echo $myException->getError();
}
echo '<br /><b>Impossible d\'exécuter ===></b><br />' . $query . '**' . mysql_error(), mysql_errno();
} else {
return $Result;
  }}
 

je ne suis pas sur que cela répond a ta question toutefois!

ps: tu n'utilise plus PDO tu passes par quoi alors?

Dernière modification par Darkangel (09-12-2011 14:21:12)

Hors ligne

#8 09-12-2011 14:30:12

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Je n'utilise plus QUE PDO


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 09-12-2011 14:31:04

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

bah pas lu correctement sorry smile

Dernière modification par Darkangel (09-12-2011 14:34:03)

Hors ligne

#10 09-12-2011 14:34:40

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

bon si je comprend bien il faut que je me mette à PDO plus performant?
plus simple?

Hors ligne

#11 09-12-2011 14:39:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

J'ai déjà tout dit à ce sujet, me semble-t-il, et il y a longtemps.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 09-12-2011 17:14:05

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

Re salutation Maljuna,

Voici la fonction avec pdo:


function get_fonc_group(){
$pdo= DbConnexion::getInstance();
$groups_foncs= array();
$get_fonc_group = $pdo->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
while($fonc_group = $get_fonc_group->fetch(PDO::FETCH_ASSOC))
{$groups_foncs[] = $get_fonc_group;
}
return $groups_foncs;
$get_fonc_group->closeCursor();
}
 

mais ca me retourne


array
  0 =>
    object(PDOStatement)[6]
      public 'queryString' => string 'SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites' (length=268)
  1 =>
    object(PDOStatement)[6]
      public 'queryString' => string 'SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites' (length=268)
 

Hors ligne

#13 11-12-2011 16:53:13

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Probleme de mise en place d'un select

Bonjour,

darkangel a écrit :

1.function get_fonc_group(){
2.$db = new DB;
3.$groups_foncs= array();
4.$get_fonc_group = $db->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
5.while($fonc_group = mysql_fetch_assoc($get_fonc_group))
6.{$groups_foncs[] = $get_fonc_group;
7.}
8.return $groups_foncs;
9. $db->cnx_close();
10.}

C'est MK qui a identifié la source de ton problème. Tu exécutes ta requête à partir de ta classe et tu fais un fetch à partir de la bibliothèque mysqli. Cela ne peut fonctionner ainsi.
Soit tu fais le fetch à partir d'une méthode de ta classe soit tu implémentes localement mysqli dans ta fonction.
De plus une autre raison pour laquelle cela ne peut fonctionner, c'est que tes messages de retour indiquent l'utilisation d'un PDOstatement au sein de ta classe, or tu ne peux absoluement pas requêter via PDO et récupérer les données via mysqli, c'est soit tu fais tout en PDO soit tout en mysqli.

Bonne continuation

++

Dernière modification par Jc (11-12-2011 16:56:23)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 11-12-2011 17:00:43

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

Bonjour,

je ne suis pas certain de bien cerner votre réponse.
dans mon dernier post j'ai utiliser PDO.
je suis pret à faire tout en PDO désormais mais comment procéder pour récupérer les données en PDO?

Merci d'avance

Hors ligne

#15 11-12-2011 17:09:24

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Probleme de mise en place d'un select

Par exemple $data=$myPDOobject->fetch();

Je t'invite à aller consulter la documentation en ligne

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#16 12-12-2011 11:09:30

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

bon j'ai donc vérifié mon script et l'ai adapté !
cela donne désormais la fonction suivante:


function get_fonc_group(){
$pdo= DbConnexion::getInstance();
$groups_foncs= array();
$get_fonc_group = $pdo->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF USING(idGroupe) INNER JOIN Fonctionnalites AS F USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
$fonc_group = $get_fonc_group->fetchall();
return $fonc_group;
$get_fonc_group->closeCursor();
}
 

pour l'affichage des données j'ai procédé comme ceci:


echo '<br /><br /><b>on affiche les fonctionnalites de tous les groupes</b><br />';
$fonc_group =$user->get_fonc_group();
$count_group = sizeof($fonc_group);
echo '<table border="1">
<tr><td>IdGroupe</td><td>Desc Groupe</td><td>Id Fonctionnalite</td><td>Desc Fonctionnalite</td></<tr>
'
;
for ($i=0; $i<$count_group; $i++)
{

echo '<tr><td>'.$fonc_group[$i]["idGroupe"].'</td><td>'.$fonc_group[$i]["descGroupe"].'</td><td>'.$fonc_group[$i]["idFonctionnalites"].'</td><td>'.$fonc_group[$i]["descFonctionnalites"].'</td></tr>';
}
echo '</table>';
 

et cela me donne:

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
1                 Admin            2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

La question est la suivante: Comment procéder afin que dans le cas ou l'id groupe et desc groupe similaire on puisse fusionner les cellule de sorte à avoir

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
                                         2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

merci d'avance pour votre aide!
Ps: Il s'agit de fonc bidons pour l'instant

Hors ligne

#17 12-12-2011 11:39:42

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Probleme de mise en place d'un select

pas très optimisé tout ça wink
a++

Hors ligne

#18 12-12-2011 11:49:15

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

ok merci mais faudrait m'en dire un plus en vue de pouvoir l'optimiser !

Hors ligne

#19 12-12-2011 12:42:21

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Darkangel a écrit :

et cela me donne:

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
1                 Admin            2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

La question est la suivante: Comment procéder afin que dans le cas ou l'id groupe et desc groupe similaire on puisse fusionner les cellule de sorte à avoir

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
                                         2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

Sur d'autres forums, on te répondrrait qu'il s'agit là d'une problématique qui ne concerne pas SQL, que c'est de la cosmétique. Ce qui, au demeurant est assez vrai.
Toutefois, puisque MySQL nous propose la fonction de groupage GROUP_CONCAT, pourquoi s'en priver ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#20 12-12-2011 13:47:25

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Probleme de mise en place d'un select

le closecursor 'est jamais appeler big_smile:D
a++

Hors ligne

#21 12-12-2011 15:11:12

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

hello!

j'ai donc intégrer group concat.


SELECT GROUP_CONCAT( DISTINCT G.idGroupe ) , G.descGroupe, F.idFonctionnalites, descFonctionnalites
FROM Groupes_Utilisateurs AS G
INNER JOIN Groupes_has_Fonctionnalites AS GHF
USING ( idGroupe )
INNER JOIN Fonctionnalites AS F
USING ( idFonctionnalites )
LIMIT 0 , 30
 

mais cela ne me retourne qu'un seul resultat a lieu de 2 dans mon exemple
cf post précédent pour résultat souhaité

:array

  0 =>
    array
      'GROUP_CONCAT(DISTINCT G.idGroupe)' => string '1,2' (length=3)
      0 => string '1,2' (length=3)
      'descGroupe' => string 'Admin' (length=5)
      1 => string 'Admin' (length=5)
      'idFonctionnalites' => string '2' (length=1)
      2 => string '2' (length=1)
      'descFonctionnalites' => string 'Tout voir et tout modifier' (length=26)
      3 => string 'Tout voir et tout modifier' (length=26)

ps: bien fait ton doc maljuna! (en cours de lecture) merci!

Hors ligne

#22 12-12-2011 15:18:44

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Tu ne fais pas le  GROUP_CONCAT sur les bonnes colonnes

SELECT G.idGroupe, G.descGroupe, GROUP_CONCAT( DISTINCT F.idFonctionnalites ) AS ifs, GROUP_CONCAT(descFonctionnalites)AS dfs
FROM Groupes_Utilisateurs AS G
INNER JOIN Groupes_has_Fonctionnalites AS GHF
USING ( idGroupe )
INNER JOIN Fonctionnalites AS F
USING ( idFonctionnalites )
GROUP BY G.idGroupe

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#23 12-12-2011 15:28:46

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

ok thanks!!
mais alors derniere chose de mise en page!

IdGroupe    Desc Groupe    Id Fonctionnalites    Desc Fonctionnalites
1                 Admin         1,2                          Tout voir,Tout voir et tout modifier
2                 LEAR            1                           Tout voir

comment procéder afin que les id Fonctionnalites et les descFonc aille a la ligne


IdGroupe    Desc Groupe    Id Fonctionnalites    Desc Fonctionnalites
1                 Admin         1,                            Tout voir,
                                        2                           Tout voir et tout modifier
2                 LEAR            1                           Tout voir

merci pour votre aide en tout cas!


ps: je ne comprend pas la remarque de pierrot quant au closecursor 'est jamais appeler

Hors ligne

#24 12-12-2011 15:50:21

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Probleme de mise en place d'un select

Darkangel a écrit :

derniere chose de mise en page!

Alors là, pour le coup c'est de la cosmétique qui sort du champ de MySQL. A toi de traiter les valeurs retournées avec un explode ou un split.

Darkangel a écrit :

ps: je ne comprend pas la remarque de pierrot quant au closecursor 'est jamais appeler

La ligne 7, dans ton script est située après la ligne 6.
Jusque là, rien d'anormal.
Sauf que, la ligne 7 brise la linéarité du code (return), donc la ligne suivante ne sera jamais exécutée.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#25 12-12-2011 15:58:59

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Probleme de mise en place d'un select

sous entendu qu'un closecursor doit toujours etre situé avant le return?

Dernière modification par Darkangel (12-12-2011 15:59:17)

Hors ligne

Pied de page des forums