我没有使用SQL的经验,但显然这是实现我目标的唯一途径。
我有两个表名为pp_users
,另一个名为pp_userdata
pp_users
包含有关网站每个用户的信息。每个用户都有一个ID和一个电子邮件地址以及一些其他信息。列结构是。
ID - user_email
pp_userdata包含meta_keys形式的附加信息,其id与pp_users中的ID相对应。因此,该结构显示了每个用户ID的一系列附加信息。格式是。
meta_id - user_id - meta_key - meta_value
我们追求的两个元键是first_name
和last_name
因此,目的是让每个用户都在pp_users
,然后使用meta_key last_name
中的相应user_id
通过pp_userdata
对其进行排序。
经过一些阅读后,我认为这需要两个表格加入,但我不知道如何通过相应的meta_key
获得user_id
。
有什么想法吗?
非凡
答案 0 :(得分:0)
要获取与给定用户关联的所有meta_users行,可以使用以下查询。
select meta_users.*
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here);
要获取与给定用户相关的特定密钥,您可以使其更具体。
select meta_users.*
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here)
and meta_key = (some key name here);
按姓氏排序:
select meta_users.*
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here)
and meta_key = 'last_name'
order by meta_value;
答案 1 :(得分:0)
您的连接语法,以获得如下结果集:
+------+------------------+----------+-----------+
| id | user_email | lastname | firstname |
+------+------------------+----------+-----------+
| 1 | test@example.com | Doe | John |
+------+------------------+----------+-----------+
将是:
SELECT id,
user_email,
meta_lastname.meta_value lastname,
meta_firstname.meta_value firstname
FROM pp_users
LEFT JOIN pp_userdata meta_lastname
ON meta_lastname.user_id = pp_users.id
LEFT JOIN pp_userdata meta_firstname
ON meta_firstname.user_id = pp_users.id
WHERE meta_lastname.meta_key = 'last_name'
AND meta_firstname.meta_key = 'first_name'
此查询多次加入pp_userdata
表,使用不同的别名(此处别名为meta_firstname
和meta_lastname
)。您可以根据需要多次执行此操作以从元数据表中获取值 - 每个键类型一个连接。如果保持别名有意义,则可以轻松跟踪哪个连接表提供结果中的哪些列。
答案 2 :(得分:0)
SELECT u.ID, u.user_id, a.meta_key, a.meta_value, b.meta_key, b.meta_value
FROM pp_users u
JOIN pp_userdata a ON u.ID = a.user_id AND a.meta_key='last_name'
JOIN pp_userdata b ON u.ID = b.user_id AND b.meta_key='first_name'
ORDER BY a.meta_value
或者,您可以将first_name
和last_name part
移至WHERE
子句
SELECT u.ID, u.user_id, a.meta_key, a.meta_value, b.meta_key, b.meta_value
FROM pp_users u
JOIN pp_userdata a ON u.ID = a.user_id
JOIN pp_userdata b ON u.ID = b.user_id
WHERE a.meta_key='last_name' AND b.meta_key='first_name'
ORDER BY a.meta_value