0

$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 一起使用,然后按 last_name 对 $results 进行 asort() 以获得按字母顺序排列的输出并使用 foreach 回显 $results

foreach ($results as $result) {
  echo $result->user_id.' '.$result->first_name.' '.$result->last_name;
}

如果 $referrer == "seller" 输出应如下所示:

4 Betty Boo
1 John Doe

那个单一的查询应该是什么样子的?

谢谢你的帮助。

4

2 回答 2

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_tablesecondary_table twice第一次过滤名字,第二次过滤姓氏。然后要获得名称,您只需将第一个 meta_value 与第二个连接起来。

于 2012-11-14T19:30:08.113 回答
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;
    }
于 2012-11-15T08:16:20.367 回答