MY SQL Query通过相应的ID加入和搜索

时间:2011-04-23 12:03:23

标签: mysql join

我没有使用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_namelast_name

的值

因此,目的是让每个用户都在pp_users,然后使用meta_key last_name中的相应user_id通过pp_userdata对其进行排序。

经过一些阅读后,我认为这需要两个表格加入,但我不知道如何通过相应的meta_key获得user_id

有什么想法吗?

非凡

3 个答案:

答案 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_firstnamemeta_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_namelast_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