我通过这种方式获得作者:
$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