子查询查看单独表中的字段对于相同的id是空还是空


Subquery to see if a field in a separate table is null or empty for the same id

我通过这种方式获得作者:

$feat_authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY rand() LIMIT 3");

但是我想检查一个单独的数据库表:wp_usermeta,其中有一个字段meta_key='description',看看它的不是空的或null为关联的ID (user_id和ID从第一个表匹配)。

wp_usermeta产率的选择与打印:

Array
(
    [0] => stdClass Object
        (
            [umeta_id] => 19
            [user_id] => 2
            [meta_key] => first_name
            [meta_value] => Rita
        )
    [1] => stdClass Object
        (
            [umeta_id] => 20
            [user_id] => 2
            [meta_key] => last_name
            [meta_value] => Santos
        )
    [2] => stdClass Object
        (
            [umeta_id] => 21
            [user_id] => 2
            [meta_key] => nickname
            [meta_value] => rita
        )
    [3] => stdClass Object
        (
            [umeta_id] => 22
            [user_id] => 2
            [meta_key] => description
            [meta_value] => I’m the coolest person in Uniplaces. I also post stuff on Facebook and other social networks.
        )

我尝试了这个,我知道它给了我所有的空描述:SELECT * FROM wp_usermeta WHERE meta_key = 'description' AND meta_value = ''

但我不确定如何将它们组合在一起,以便在第一个查询中,我只得到第二个表中的描述不为空或null的结果。另一件事是扔我的是,我不确定如何把id到第二个查询作为第一个id有一个不同的名称(id相对于user_id)。

不是100%确定我得到你所要求的,但是你可以使用一个连接到那个表与额外的数据和一个case语句?

SELECT 
    ID
    , user_nicename 
    ,CASE 
        WHEN Len([meta_key='description'])>0 THEN 'Some Content'
        WHEN Len([meta_key='description'])=0 THEN 'No Content'
        WHEN [meta_key='description'] Is Null THEN 'Null'
        ELSE 'OTHER'
     END AS Category
from $wpdb->users as u
    left outer join wp_usermeta as m
        ON u.ID=m.user_id
WHERE display_name <> 'admin' 
ORDER BY rand() 
LIMIT 3

如果你只想看到没有null或空描述的用户,也许:

SELECT 
    ID
    , user_nicename 
    ,[meta_key='description']
from $wpdb->users as u
    INNER JOIN wp_usermeta as m
        ON u.ID=m.user_id
WHERE 
    display_name <> 'admin' 
    AND Len([meta_key='description'])>0
    AND [meta_key='description'] IS NOT NULL -- probably not required depending on len() behaviour
ORDER BY rand() 
LIMIT 3

或者你可能在每个用户的第二个表中有多个记录,你想在哪里meta_key = description?

SELECT 
    ID
    , user_nicename 
    ,meta_value
from $wpdb->users as u
    left outer join wp_usermeta as m
        ON u.ID=m.user_id
        AND meta_key='description'
WHERE 
    display_name <> 'admin' 
    AND Len(meta_value)>0
ORDER BY rand() 
LIMIT 3

我刚刚快速浏览了一下表格结构,我认为你需要选项3