0

表用户:

user_id     user_username   user_password
-----------------------------------------
1           tomasr          NULL

表用户项:

f_user_id   f_moduleItem_id     userItem_value
--------------------------------------------------
1           1                   John
1           2                   Wayne

表模块:

module_id   module_systemTitle  module_title
------------------------------------------------
1           users               Users

表模块项:

moduleItem_id   f_module_id     moduleItem_title    moduleItem_order
----------------------------------------------------------------------------
1               1               Firstname           1
2               1               Lastname            2

大家好,如何从 useritems 表中获取包含数据的用户列表,例如一个用户的一行。那是平均数行数等于用户数。

期望结果是:

user_id user_username   firstname    lastname
------------------------------------------------------------------------------

1       tomasr          John         Wayne
4

2 回答 2

0
SELECT  a.user_ID,
        a.user_username,
        MAX(CASE WHEN c.moduleItem_title = 'Firstname' THEN b.userItem_value ELSE NULL END) `Firstname`,
        MAX(CASE WHEN c.moduleItem_title = 'Lastname' THEN b.userItem_value ELSE NULL END) `Lastname`
FROM    users a
        INNER JOIN useritems b
            On a.user_ID = b.f_user_id
        INNER JOIN moduleitems c
            ON b.f_moduleItem_id = c.moduleItem_id
GROUP   BY a.user_ID, a.user_username
于 2013-02-08T09:19:12.167 回答
0

您将需要使用INNER JOIN将两个表连接在一起。该链接将更好地解释它,但类似这样:

SELECT u.user_username, i.userItem_value 
FROM users u 
INNER JOIN userItems i ON u.user_id=i.f_user_id;

这将返回找到匹配项的所有行,但请记住,如果 userItems 中没有与 users 表行匹配的行,则 users 行将不会包含在结果中。为此,您将需要查看 LEFT JOINS 并使用 IFNULL(类似的东西)。

于 2013-02-08T09:00:20.747 回答