1

私は Wordpress と Event Espresso を使用していますが、通常、次の SQL があります。

SELECT m.user_id, m.meta_key, m.meta_value from wp_usermeta as m
WHERE m.meta_key in ('event_espresso_city','event_espresso_state')
ORDER BY m.user_id

ユーザーの都市と州を取得しようとしているので、user_id でグループ化したいのですが、そうすると、都市の値のみを取得して無視するか、州の値を上書きします。

concat(m.metavalue1, m.meta_value2) WHERE m.meta_key in ('event_espresso_city','event_espresso_state') を実行できる方法はありますか? つまり、2 つの行を連結する必要があります...何か提案はありますか?

4

3 に答える 3

3

MySQL は、GROUP_CONCAT()この目的のための機能を提供します。

一般的なケースでは、次のように、同じテーブル内の複数のレコードから 1 つのレコードを生成するために、テーブルをそれ自体と結合する必要があります。

SELECT m_city.user_id, m_city.meta_value as city, m_state.meta_value as state
FROM wp_usermeta as m_city
INNER JOIN wp_usermeta as m_state on m_city.user_id = m_state.user_id
WHERE m_city.meta_key = 'event_espresso_city'
AND m_state.meta_key = 'event_espresso_state'
ORDER BY m_city.user_id
于 2013-03-20T16:53:32.397 に答える
2

試す

Select coalesce(c.userId, s.userId) UserId, 
     c.meta_value City, s.meta_Value state
From wp_usermeta c
   full Join wp_usermeta s
       On s.UserId = c.UserId
          and c.meta_key = 'event_espresso_city'
          and s.meta_key = 'event_espresso_state'
Where @userId in (c.User_Id, s.User_id)
于 2013-03-20T16:54:19.420 に答える
1

これを達成するために自己内部結合を使用する例を示す投稿へのあなたの質問に対する私のコメントを参照してください。クエリは次のようになります。

SELECT ma.user_id, ma.meta_key as City, mb.meta_value as State
FROM wp_usermeta as ma
INNER JOIN wp_usermeta as mb
ON ma.user_id = mb.user_id
WHERE 
ma.meta_key = 'event_espresso_city'
AND
mb.meta_key = 'event_espresso_state'
ORDER BY ma.user_id
于 2013-03-20T16:55:35.560 に答える