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で使用できるように、1つのクエリにまとめてから、$ resultsをlast_nameでasort()してアルファベット順に出力し、$resultsをforeachのようにエコーします。

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_tableしてsecondary_table twiceいます。最初は名でフィルタリングされ、2 回目は姓でフィルタリングされます。次に、名前を取得するには、最初の meta_value と 2 番目の 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 に答える