Php mysql从4个表中选择
也许这太复杂了,但我无法在WordPress插件中使用此查询获得结果: 我有4张桌子:Php mysql从4个表中选择,php,mysql,wordpress,Php,Mysql,Wordpress,也许这太复杂了,但我无法在WordPress插件中使用此查询获得结果: 我有4张桌子: k:子数据(id=k.id) p:父数据(id=用户id) u:用户元数据(id=用户\u id) 父子关系数据(r.ID |用户ID | k.ID) 我希望有一个结果,根据关系表中的关系列出所有子数据及其父数据和父名称+电子邮件(来自元数据表) 我被这件事困住了: SELECT k.*, p.*, u1.meta_value AS parent_lastname, u2.meta_value A
- k:子数据(id=k.id)
- p:父数据(id=用户id)
- u:用户元数据(id=用户\u id)
- 父子关系数据(r.ID |用户ID | k.ID)
SELECT
k.*,
p.*,
u1.meta_value AS parent_lastname,
u2.meta_value AS parent_firstname,
u3.meta_value AS parent_email
FROM kids k, parents p, usermeta u1, usermeta u2, usermeta u3
LEFT JOIN relations r
ON (p.user_id = r.user_id
AND k.ID = r.kid_id
AND u1.user_id = r.user_id
AND u2.user_id = r.user_id
AND u3.user_id = r.user_id)
WHERE r.user_id = u1.user_id
AND u1.meta_key = 'last_name'
OR u2.meta_key = 'first_name'
OR u3.meta_key = 'email'
GROUP BY k.ID
提前谢谢。不需要分组。虽然如果一个孩子有两个父母记录,你可能想用它将两个父母分组到一行,但不确定这是否是你的要求。如果一个孩子有两个父母,那么将为该孩子返回的父母是未定义的 假设所有孩子都有父母,所有父母都有名字、姓氏和电子邮件:-
SELECT
k.*,
p.*,
u1.meta_value AS parent_lastname,
u2.meta_value AS parent_firstname,
u3.meta_value AS parent_email
FROM kids k
INNER JOIN relations r ON k.ID = r.kid_id
INNER JOIN parents p ON p.user_id = r.user_id
INNER JOIN usermeta u1 ON r.user_id = u1.user_id AND u1.meta_key = 'last_name'
INNER JOIN usermeta u2 ON r.user_id = u1.user_id AND u1.meta_key = 'first_name'
INNER JOIN usermeta u3 ON r.user_id = u1.user_id AND u1.meta_key = 'email'
如果该假设错误,则将内部联接更改为左侧外部联接
SELECT
k.*,
p.*,
u1.meta_value AS parent_lastname,
u2.meta_value AS parent_firstname,
u3.meta_value AS parent_email
FROM kids k
LEFT OUTER JOIN relations r ON k.ID = r.kid_id
LEFT OUTER JOIN parents p ON p.user_id = r.user_id
LEFT OUTER JOIN usermeta u1 ON r.user_id = u1.user_id AND u1.meta_key = 'last_name'
LEFT OUTER JOIN usermeta u2 ON r.user_id = u1.user_id AND u1.meta_key = 'first_name'
LEFT OUTER JOIN usermeta u3 ON r.user_id = u1.user_id AND u1.meta_key = 'email'
我猜
家长电子邮件是一个拼写错误?你不应该混合连接语法。用一个或另一个,而不是两个都用。不要使用隐式连接语法。在这种情况下,一个孩子可以有多个父母,可能需要GROUP BY——因为您的评论,我按关系ID将其分组:如果有多个父母,则该孩子会出现多次。更正WordPress中的用法:用户电子邮件存储在表“users”中,而不是“user\u meta”中。但是通过这种方法,也可以很容易地加入“用户”表。如果你很高兴一个孩子被多次列出(每个家长一次),那么我认为不需要分组。如果需要,可以使用一个字段将父详细信息分组到一个字段中。