簡體   English   中英

獲取所有具有相同first_name的用戶last_name

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM