Va rog daca ma puteti ajuta cu o interogare.
Am facut cu codeigniter un script de user management, asociati in grupuri, iar fiecare grup cu un numar de permisiuni de access ( si acestea setate la randul lor intr-un tabel special, pentru a mai putea adauga pe viitor )
avem
Tabel useri ( u_id, u_group... etc )
Tabel grupuri ( g_id, g_nume... etc )
Tabel permisiuni ( p_id, p_nume, p_alias... etc)
Tabel permisiuni_grup ( id_grup, id_permisiune)
Doresc o interogare in care sa imi apara, nume grupului, numarul de useri in grupul acela, si numarul de permisiuni pe care il are ( sa zicem ca aveam un total de 15 permisiuni ex: can_view_index, can_edit_article, can_publish_article.. etc )
Am incercat doua variante.
Varianta Codeigniter
Cod: Selectaţi tot
$this->db
->distinct()
->select("g.*, COUNT(u.u_id) as total_useri, COUNT(pg.id_permisiune) as total_permisiuni")
->from("grupuri g")
->join("useri u", "g.g_id = u.u_group", "LEFT")
->join("permisiuni_grup pg", "g.g_id = pg.id_grup", "LEFT")
->group_by("g.g_id, u.u_id")
->limit($limit, $offset)
->order_by("total_permisiuni", "desc")
->get()
->result_array();
Rezultatul este dezamagitor
Cod: Selectaţi tot
Id Nume Grup Descriere Nr Useri Nivelu
1 Admin Administrator 15 15
2 Editor Editor 2 2
Nivelul este ok, adminul intradevar are 15 permisiuni ( toate ) si editorul 2 . Dar admini am 2, si editori am 4
Varianta in SQL tradusa din Codeigniter ar fi ceva de genul
Cod: Selectaţi tot
SELECT DISTINCT `g`.*, COUNT(u.u_id) as total_useri, COUNT(pg.id_permisiune) as total_permisiuni
FROM (`grupuri` g)
LEFT OUTER JOIN `useri` u ON `g`.`g_id` = `u`.`u_group`
LEFT OUTER JOIN `permisiuni_grup` pg ON `g`.`g_id` = `pg`.`id_grup`
GROUP BY `g`.`g_nume`, `u`.`u_id`
ORDER BY `total_permisiuni` desc
LIMIT 10
Are careva vre-o idee, sau ma rezum in a mai face 2 interogari separate pentru a determina numarul de utilizatori respectiv permisiuni pe care le are fiecare grup ?
Multumesc.