$ wpdb MySQL从主表中选择并将每行与另一个表的两行连接起来

时间:2012-11-14 19:04:38

标签: mysql sql wordpress wpdb

$ 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

该单个查询应该如何?

感谢您的帮助。

2 个答案:

答案 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;
    }