2017-03-27 4 views
0

私のWordPressのサイトの管理者のみの部分にバックエンドのユーザー情報を表示するために2つのテーブルを一緒にピボットしようとしていると、エラー "MySQLは言った:不明な列 'u.ID'の 'on句'" データ構造は正しいですが、私はこれを過ぎているようです。Wordpress- MySQLは言った: '不明な列' users.ID 'on節'

select u.ID as name, 
um.* 
from users as u, usermeta as um 
join (
    select um.umeta_id, 
    max(case when meta_key='nickname' then meta_value end)as nickname, 
    max(case when meta_key='first_name' then meta_value end)as first_name 
    from usermeta as um 
    group by um.umeta_id) 
um on u.ID=um.umeta_id 
+2

Dont mix、(古い結合構文)、JOIN構文 –

答えて

0

つの提案:

1)の文(ドン」内ユニークエイリアステーブルを作る)古い学校のカンマが新しい

2キーワードJOIN構文で結合構文を混在させることはできません。 tは私たちは、2つのusermetaテーブルに参加する必要はないと思う)


umエイリアスを再利用します。私は、このクエリによって返される結果セットのような結果セットを返そうと思っています:

SELECT u.id   AS name 
    , m.nickname  AS nickname 
    , m.first_name AS first_name 
    FROM users u 
    LEFT 
    JOIN (SELECT um.umeta_id 
      , MAX(CASE WHEN um.meta_key='nickname' THEN um.meta_value END) AS nickname 
      , MAX(CASE WHEN um.meta_key='first_name' THEN um.meta_value END) AS first_name 
      FROM usermeta um 
     GROUP 
      BY um.umeta_id 
     ) m 
    ON m.umeta_id = u.id 
ORDER BY u.id 

これは単なる推測です。仕様やサンプルデータ、期待される結果がなければ、我々はただ推測しているだけです。


フォロー

参加する代わりに、我々は、SELECTリスト内の相関サブクエリを使用することができます。例えば:私たちはusermetaテーブルに定義された適切なインデックスを持っているよう

SELECT u.id AS name 
    , (SELECT umn.meta_value 
      FROM usermeta umn 
      WHERE umn.umeta_id = u.id 
      AND umn.meta_key='nickname' 
      ORDER BY umn.meta_value DESC 
      LIMIT 1 
     ) AS nickname 
    , (SELECT umn.meta_value 
      FROM usermeta umn 
      WHERE umn.umeta_id = u.id 
      AND umn.meta_key='first_name' 
      ORDER BY umn.meta_value DESC 
      LIMIT 1 
     ) AS first_name 
    FROM users u 
ORDER BY u.id 

外側のクエリによって返される行の合理的な数のために、我々は(umeta_id,meta_key)の列をリードし、限り、合理的なパフォーマンスを得ることができます。理想的には、被覆指数はmeta_valueも含まれています。

これらのサブクエリはそれぞれの外部クエリによって返されるローごとに実行されるため、多くの行を返すとパフォーマンスが低下する可能性があります。

+0

それは完璧に動作します、ありがとう! –

+0

申し訳ありませんが、ユーザーテーブルの最初の結果IDのデータが良好ですが、すべての行で完了していません。 –

+0

この回答のクエリは、「users」テーブルのすべての*行とusermetaテーブルにある一致するニックネームとfirst_nameを返す必要があります。一致する行が見つからない場合、ニックネームとfirst_nameはNULLになります。 (umeta_idカラムの名前は 'users(id)'を参照する外来キーにとってはちょっと奇妙です。 'umeta_id'カラムにはユーザからのid値が含まれていますか?それは正しい結合条件ですか?クエリは元のクエリからコピーされました...私はサンプルデータを持っていません、私が持っている唯一の仕様は、問題のSQLエラーです。) – spencer7593

関連する問題