$ referrer是唯一定义的变量。
main_table保存用户和引荐者之间的关系。推荐人可以有很多用户。
user_id | referrer
1 | seller
2 | abother seller
3 | another seller
4 | seller
secondary_table包含user_id,meta_key和meta_value,其中last_name和first_name为meta_keys。
user_id | meta_key | meta_value
1 | first_name | John
1 | last_name | Doe
4 | first_name | Betty
4 | last_name | Boo
我需要合并以下3个查询
SELECT user_id FROM main_table WHERE referrer = $referrer
SELECT meta_value FROM secondary_table WHERE user_id = $user_id AND meta_key = first_name
SELECT meta_value FROM secondary_table WHERE user_id = $user_id AND meta_key = last_name
进入一个查询,这样我就可以使用$ results = $ wpdb-> get_results,然后asort()$ last的结果是按字母顺序排序的输出和echo $ results with foreach like
foreach ($results as $result) {
echo $result->user_id.' '.$result->first_name.' '.$result->last_name;
}
如果$ referrer ==“seller”,输出应如下所示:
4 Betty Boo
1 John Doe
该单个查询应该如何?
感谢您的帮助。
答案 0 :(得分:0)
你可以用这个:
select
main_table.user_id,
concat(s1.meta_value, ' ', s2.meta_value) as name
from
main_table left join secondary_table s1
on main_table.user_id = s1.user_id and s1.meta_key = 'first_name'
left join secondary_table s2
on main_table.user_id = s2.user_id and s2.meta_key = 'last_name'
where
referrer = $referrer
我正在使用main_table
加入secondary_table twice
,第一次使用第一个名称进行过滤,第二次使用姓氏进行过滤。然后要获得名称,您只需要将第一个meta_value与第二个meta_value连接起来。
答案 1 :(得分:0)
它有点棘手。您可以使用以下查询
select m.user_id as new_user_id, s1.meta_value as new_first_name, s2.meta_value as new_last_name from main_table m, secondary_table s1, secondary_table s2 where m.user_id=s1.user_id and m.user_id=s2.user_id and s1.meta_key='first_name' and s2.meta_key='last_name' and m.referrer='seller' order by new_last_name
然后你可以做
$results = $wpdb->get_results(...)
foreach ($results as $result) {
echo $result->new_user_id.' '.$result->new_first_name.' '.$result->new_last_name;
}