Bonjour,
Je sollicite votre aide pour savoir si ce que je veux faire est possible.
Je récupère une liste de commentaires avec une requête et des jointures.
Puis pour chaque résultat j'exécute une nouvelle requête pour récupérer le groupe le plus important de l'utilisateur
J'aimerais dans la première requête la récupération du groupe de l'utilisateur, mais je doute que cela soit possible aussi je souhaiterais votre avis.
Car actuellement pour récupérer 20 commentaires j'ai une requête puis 20 requêtes pour récupérer le groupe de l'utilisateur avec la plus haute importance ...
Je vous remercie par avance pour votre aide.
Table :
pour récupérer le groupe utilisateur :
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 CREATE TABLE IF NOT EXISTS `avdev_groups` ( `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT 'it''s translated in code', `description` varchar(100) NOT NULL, `importance` int(11) NOT NULL DEFAULT '0' COMMENT 'higher is better', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `avdev_users_groups` -- DROP TABLE IF EXISTS `avdev_users_groups`; CREATE TABLE IF NOT EXISTS `avdev_users_groups` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` int(11) UNSIGNED NOT NULL, `group_id` mediumint(8) UNSIGNED NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uc_users_groups` (`user_id`,`group_id`), KEY `fk_users_groups_users1_idx` (`user_id`), KEY `fk_users_groups_groups1_idx` (`group_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2593 DEFAULT CHARSET=utf8;
données dans ma table avdev_groups :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `avdev_groups`.`name` FROM `avdev_users_groups` JOIN `avdev_groups` ON `avdev_users_groups`.`group_id`=`avdev_groups`.`id` WHERE `avdev_users_groups`.`user_id` = '2' ORDER BY `avdev_groups`.`importance` DESC limit 1;
données dans ma table avdev_users_groups :
id name description importance 1 admin Administrator 5 2 members General User 1 4 customers Customers 2 5 customersmc Customers My Club 3 6 customersmcp Customers My Club Premium 4 7 customerswc3d Customers Wine Cellar 3D 3 8 customerswc3dp Customers Wine Cellar 3D Premium 4
donne :
id user_id group_id 2588 2 1 2589 2 2 2590 2 5 2591 2 6 2592 2 7
name admin
Table :
ma requête pour récupérer les commentaires :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 -- -- Structure de la table `avdev_ticket_category` -- CREATE TABLE `avdev_ticket_category` ( `id` int(11) NOT NULL, `category_en` varchar(200) NOT NULL DEFAULT '', `category_fr` varchar(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `avdev_ticket_priorities` -- CREATE TABLE `avdev_ticket_priorities` ( `id` int(10) NOT NULL, `priority_en` varchar(200) NOT NULL DEFAULT '', `priority_fr` varchar(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `avdev_ticket_status` -- CREATE TABLE `avdev_ticket_status` ( `id` int(10) NOT NULL, `status_en` varchar(200) NOT NULL DEFAULT '', `status_fr` varchar(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `avdev_ticket_tickets` -- CREATE TABLE `avdev_ticket_tickets` ( `id` int(10) NOT NULL, `iduser` int(10) NOT NULL, `subject` varchar(200) NOT NULL, `body` text NOT NULL, `idpriority` int(10) NOT NULL, `idstatus` int(10) NOT NULL, `idcategory` int(10) NOT NULL, `attachment` varchar(200) DEFAULT NULL, `datecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ispublic` tinyint(1) NOT NULL DEFAULT '0', `language` varchar(2) NOT NULL DEFAULT 'en' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `avdev_users` -- CREATE TABLE `avdev_users` ( `id` int(11) UNSIGNED NOT NULL, `ip_address` varchar(45) NOT NULL, `username` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, `salt` varchar(255) DEFAULT NULL, `email` varchar(254) NOT NULL, `activation_code` varchar(40) DEFAULT NULL, `forgotten_password_code` varchar(40) DEFAULT NULL, `forgotten_password_time` int(11) UNSIGNED DEFAULT NULL, `remember_code` varchar(40) DEFAULT NULL, `created_on` int(11) UNSIGNED NOT NULL, `last_login` int(11) UNSIGNED DEFAULT NULL, `active` tinyint(1) UNSIGNED DEFAULT NULL, `first_name` varchar(50) DEFAULT NULL, `last_name` varchar(50) DEFAULT NULL, `company` varchar(100) DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, `openid` text NOT NULL, `newsletter` tinyint(1) DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
J'ai beau me creuser la tête je ne vois pas comment faire à par rajouter un champs dans la table user avec l'id de la categorie principal et faire une jointure comme pour status etc
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `t`.`id` as `id`, `t`.`iduser` as `iduser`, `t`.`subject` as `subject`, `t`.`body` as `body`, `t`.`idpriority` as `idpriority`, `t`.`idstatus` as `idstatus`, `t`.`idcategory` as `idcategory`, `t`.`attachment` as `attachment`, UNIX_TIMESTAMP(t.datecreated) as datecreated, `t`.`ispublic` as `ispublic`, `t`.`language` as `language`, `p`.`priority_fr` as `priority`, `s`.`status_fr` as `status`, `c`.`category_fr` as `category`, `u`.`username` as `username` FROM `avdev_ticket_tickets` AS `t` LEFT JOIN `avdev_ticket_priorities` AS `p` ON `t`.`idpriority` = `p`.`id` LEFT JOIN `avdev_ticket_status` AS `s` ON `t`.`idstatus` = `s`.`id` LEFT JOIN `avdev_ticket_category` AS `c` ON `t`.`idcategory` = `c`.`id` LEFT JOIN `avdev_users` AS `u` ON `t`.`iduser` = `u`.`id` WHERE `t`.`id` = '2'
ce qui complique mon code car après faut gerer lors de l'effacement modification des groupes alors que la c'est mysql qui gère.
Merci pour votre aide
Partager