Page 1 sur 1

Affichage d'un tableau groupé

Posté : 05 juin 2013, 11:10
par bunk
Bonjour,

Je voudrais sur une page afficher un formulaire matérialisé par des cases à cocher permettant d'attribuer une ou plusieurs ACL à un groupe.
Également lors de l'affichage je souhaiterais que les cases soient cochées ou non en fonction.

J'ai trois tables.

ACL :
CREATE TABLE IF NOT EXISTS `acls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `acls_value` varchar(255) NOT NULL COMMENT 'Ajouter un article\nModifier ses articles\nModifier les articles des autres\nSupprimer un article\netc...',
  `acls_slug` varchar(255) NOT NULL,
  `acls_categorie` varchar(255) NOT NULL,
  `acls_comment` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug_UNIQUE` (`acls_slug`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `acls` (`id`, `acls_value`, `acls_slug`, `acls_categorie`, `acls_comment`) VALUES
(1, 'droit numéro 1', 'perm1', 'cat1', 'Pas de description')
Groupe :
CREATE TABLE IF NOT EXISTS `groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `groups_name` varchar(255) NOT NULL,
  `groups_slug` varchar(255) NOT NULL,
  `groups_description` text,
  `online` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `grps_slug_UNIQUE` (`groups_slug`),
  KEY `grps_name_INDEX` (`groups_name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `groups` (`id`, `groups_name`, `groups_slug`, `groups_description`, `online`) VALUES
(1, 'Groupe', 'grp1', NULL, 0);
Un groupe peux avoir un ou plusieurs ACL donc j'ai une autre table :
CREATE TABLE IF NOT EXISTS `acls_groups` (
  `acls_id` int(11) NOT NULL,
  `groups_id` int(11) NOT NULL,
  PRIMARY KEY (`acls_id`,`groups_id`),
  KEY `fk_acls_has_groups_groups1_idx` (`groups_id`),
  KEY `fk_acls_has_groups_acls1_idx` (`acls_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `acls_groups` (`acls_id`, `groups_id`) VALUES
(1, 1);
Pour le moment j'ai ma requête qui me liste toutes les ACL. Ça va pas loin. Je les affiche avec un forech mas je ne sais pas comment grouper par "acls_categorie"

Pouvez-vous m'aider ?

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 12:04
par ghost5922
Bonjour,

pour regrouper des éléments par champ il suffi de mettre group by acls_categorie

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 14:43
par bunk
j'ai bien essayé mais il ne me sort que deux résultat ce qui correspond à mes deux catégories différentes. Les autres enregistrements ne sont pas listés.

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 14:48
par bunk
ma requête :
SELECT acls_value,acls_slug,acls_categorie FROM acls as acls GROUP BY acls_categorie

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 14:54
par ghost5922
tu veux regrouper tes données ou les organise par acls_categorie ?

sinon pourquoi mettre un as dans ta requête ?


group by champ va afficher un seul élément par type différant pour le champ

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 14:58
par bunk
en fait (j'étais justement en train de me demander) je veux organiser mes ACL en fonction des catégories à laquelle elles appartiennent.

pour le AS c'est pas forcément utile dans ce cas la mais c'est une fonction qui s'occupe des requête donc c'est automatique.

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 14:59
par ghost5922
ok alors tester plutôt


SELECT acls_value,acls_slug,acls_categorie FROM acls AS acls ORDER BY acls_categorie

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:01
par bunk
Quel null :|

merci je n'y ai même pas pensé.

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:10
par ghost5922
tu peux essaie cette ligne dans ton phpmyadmin
SELECT acls_value,acls_slug,acls_categorie FROM acls AS acls ORDER BY acls_categorie

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:16
par bunk
c'est la même que précédemment ?

en fait je viens de réaliser (je crois) que j'aurais pu faire un select All sur ma table ACLS et faire un usort() sur le tableau de sortie ?

maintenant je cherche pour l'affichage, le but étant de regroupé l'affichage.

j'ai ça en sortie :
Array
(
    [0] => stdClass Object
        (
            [acls_value] => droit1
            [acls_slug] => droit1
            [acls_categorie] => cat1
        )

    [1] => stdClass Object
        (
            [acls_value] => droit2
            [acls_slug] => droit2
            [acls_categorie] => cat1
        )

    [2] => stdClass Object
        (
            [acls_value] => droit3
            [acls_slug] => droit3
            [acls_categorie] => cat2
        )

    [3] => stdClass Object
        (
            [acls_value] => droit4
            [acls_slug] => droit4
            [acls_categorie] => cat2
        )

)
avoir :

cat1:
droit1
droit2

cat2:
droit3
droit4

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:21
par ghost5922
Re,

cela revient a faire un ORDER BY acls_categorie

qui va afficher d'abord la categorie 1 puis categorie 2 etc

oui c'est la meme mais moi dans phpmyadmin ca marche

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:24
par bunk
oui dans phpmyadmin ça fonctionne bien mais c'est l'affichage qui est plus complexe.

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:41
par bunk
je suis partis sur cette base la :
$categorie = '';
foreach($acl as $k=>$v){
	if(empty($categorie) || $categorie != $v->acls_categorie){
		$categorie = $v->acls_categorie;
		echo $v->acls_categorie;
	}
	echo $v->acls_slug.'<br />';
}
est-ce une bonne méthode ?

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:44
par ghost5922
Oui cela me semble bon

Re: Affichage d'un tableau groupé

Posté : 05 juin 2013, 15:48
par bunk
merci pour l'aide !