Mysql 获取所有同名用户的姓氏
我想从Wordpress usermeta表中接收一个对象,该对象包含所有同名用户的姓氏。给出了要搜索的第一个名称。Mysql 获取所有同名用户的姓氏,mysql,wordpress,Mysql,Wordpress,我想从Wordpress usermeta表中接收一个对象,该对象包含所有同名用户的姓氏。给出了要搜索的第一个名称。 i、 John Miller、John Doe和John Appleseed是我Wordpress页面上的注册用户。我想得到一个对象,包括米勒,多伊和苹果 我尝试了以下查询,但由于限制1,它只返回一个姓氏 SELECT `meta_value` FROM `wp_usermeta` WHERE `user_id` = ( SELECT `user_id` FROM
i、 John Miller、John Doe和John Appleseed是我Wordpress页面上的注册用户。我想得到一个对象,包括米勒,多伊和苹果 我尝试了以下查询,但由于限制1,它只返回一个姓氏
SELECT `meta_value`
FROM `wp_usermeta`
WHERE `user_id` = (
SELECT `user_id`
FROM `wp_usermeta`
WHERE `meta_value` LIKE 'John' AND
`meta_key` = 'first_name'
LIMIT 1
) AND `meta_key` = 'last_name';
如何修改此查询以接收所有用户的姓氏?将表连接到自身以将名字与姓氏关联,然后应用一个简单的等式
WHERE
子句:
SELECT
f.user_id,
f.meta_value AS first_name,
l.meta_value AS last_name
FROM wp_usermeta f
INNER JOIN wp_usermeta l
ON f.user_id = l.user_id AND
f.meta_key = 'first_name' AND
l.meta_key = 'last_name'
WHERE f.meta_value = 'John';
PostgreSQL中的示例执行(但查询也应在MySQL中工作):
只需将
where user\u id=(…
更改为where user\u id in(…
并删除限制1
SELECT `meta_value`
FROM `wp_usermeta`
WHERE `user_id` in (
SELECT `user_id`
FROM `wp_usermeta`
WHERE `meta_value` LIKE 'John' AND
`meta_key` = 'first_name'
) AND `meta_key` = 'last_name';
只需将
where user\u id=(…
更改为where user\u id in(…
并删除限制1
。这很有效-非常感谢!我强烈建议将此查询的EXPLAIN
输出与我的答案中的输出进行比较;根据您使用的MySQL版本,一个查询可能比另一个查询执行得更好。@cdhowie-有两种方法可以编写查询。我只是提供了一种对原始查询进行最少的修改,其中显示了解释计划。让我们假设表非常大…这将花费更长的时间?连接还是子查询?像这样的肯定会增加一些时间。之后,我的查询速度会更快,因为此查询有一个依赖子查询,而m但是,对于小数据集,这两种方法都应该表现得足够好。
SELECT `meta_value`
FROM `wp_usermeta`
WHERE `user_id` in (
SELECT `user_id`
FROM `wp_usermeta`
WHERE `meta_value` LIKE 'John' AND
`meta_key` = 'first_name'
) AND `meta_key` = 'last_name';