[英]Get all users last_name which have same first_name
我想從Wordpress usermeta表中收到一個包含所有具有相同first_name用戶的last_name的對象。 給出要搜索的名字。
即John Miller,John Doe和John Appleseed是我的Wordpress頁面上的注冊用戶。 我想要一個對象,包括Miller,Doe和Appleseed。
我嘗試了以下查詢,但由於LIMIT 1導致它僅返回一個last_name
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';
我必須如何修改此查詢才能接收所有用戶的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中工作):
$ WITH wp_usermeta (user_id, meta_key, meta_value) AS (VALUES
(1, 'first_name', 'John'),
(1, 'last_name', 'Miller'),
(2, 'first_name', 'John'),
(2, 'last_name', 'Doe'),
(3, 'first_name', 'John'),
(3, 'last_name', 'Appleseed'),
(4, 'first_name', 'Bob'),
(4, 'last_name', 'Doe')
)
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';
user_id | first_name | last_name
---------+------------+-----------
1 | John | Miller
2 | John | Doe
3 | John | Appleseed
(3 rows)
只需將where user_id = (...
更改為where user_id = (...
where user_id in (...
並刪除limit 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';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.