Hello.




What do you think about this:



SELECT  u.name,

                                IFNULL(s.skill_name,'user doesn\'t have any 
skill') AS SKILL,

                                (

                                        SELECT COUNT(skill_id) 

                                                FROM user_skill us1 

                                                WHERE us1.skill_id = us.skill_id

                                ) AS COUNT 

                                FROM user u 

                                LEFT JOIN user_skill us ON u.id = us.user_id 

                                LEFT JOIN skill s ON us.skill_id = s.id 

                                ORDER BY u.name;



+------+-----------------------------+-------+

| name | SKILL                       | COUNT |

+------+-----------------------------+-------+

| u1   | s1                          |     2 |

| u1   | s3                          |     1 |

| u2   | user doesn't have any skill |     0 |

| u3   | s1                          |     2 |

| u3   | s2                          |     1 |

+------+-----------------------------+-------+







Dean Karres <[EMAIL PROTECTED]> wrote:

> Hi,

> 

> I have three simple tables:

> 

> user

> {

>   id int PRIMARY

>   name varchar UNIQUE

> }

> 

> skill

> {

>   id int PRIMARY

>   skill_name varchar UNIQUE

> }

> 

> user_skill

> {

>   user_id int

>   skill_id int

>   UNIQUE KEY id (user_id, skill_id)

> }

> 

> Each user can have zero or more associated skills.  So you might have 

> these associations:

> 

> User_1: Skill_1, Skill_3

> User_2: <no listed skills>

> User_3: Skill_2, Skill_1

> 

> Assuming that is all the users and skills, I would like to produce a 

> report that lists each user and then the list of skills each has (if 

> any).  Along with each skill I want to print the count of how many times 

> this skill has been mapped to a user.  Using the info above then 

> something like:

> 

> User_1

>     Skill_1 (2)

>     Skill_3 (1)

> User_2

> User_3

>     Skill_1 (2)

>     Skill_2 (1)

> 

> The skill "usage counts" are in parens.  I get that there will prolly be 

> a join in order to pick up the fact that User_2 has no listed skills. 

> What I'm not sure about is how to get the over all skill counts.  Do I 

> need to do the query that returns the user and skill list then go 

> through the per user skills and do additional queries to get the skill 

> counts?

> 

> help?

> 

> Dean...K...

> 

> 



-- 
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Gleb Paharenko
 / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
       <___/   www.mysql.com




-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to