に参加MySQLのクエリは、私は2つのテーブルを持っている同じテーブル
ID | title
0 | Adam
1 | Ben
2 | Sara
3 | Camille
users_meta:
ID | user_ID | meta_key | meta_value
0 | 0 | 'weight' | '80'
1 | 0 | 'sex' | 'male'
2 | 1 | 'weight' | '93'
3 | 1 | 'sex' | 'male'
4 | 2 | 'weight' | '57'
5 | 2 | 'sex' | 'female'
6 | 3 | 'weight' | '71'
7 | 4 | 'sex' | 'female'
は、今私は男性とより多くの重量であるすべてのユーザーを取得したいです90よりも、私のクエリ:
SELECT u.* FROM users AS u
RIGHT JOIN users_meta AS weight on(u.ID=weight.user_ID)
RIGHT JOIN users_meta AS sex on(u.ID=sex.user_ID)
WHERE
weight.meta_key='weight' AND
weight.meta_key>90 AND
sex.meta_key='sex' AND
sex.meta_value ='male'
上記のクエリはうまく動作しますが、これを行うより良い方法があれば私は興味があります。ユーザーごとに多数のメタデータがある場合、異なる値をチェックするために同じテーブルにいくつかの結合が行われます。
usersテーブルに体重と性別の列がないのはなぜですか?キー/バリューテーブルでは何を得るのですか?私の意見では、これは物事を必要以上に複雑にし、タイプミスやエラーの余地を与えます。しかし、まあ、あなたは、哺乳類であるかどうか、または彼らが緑色の皮膚を持っているかどうかに興味があるところで、地球外のユーザーを格納することができます。 :-) –
表構造「これを行うのは良い方法があります場合、私は好奇心」だからも、1日の現在、私はドン、WordPressのpostmetaテーブルから来て、あなたのテーブルのデザインは* * ;-)優れあまりにも多くのことを証明します各メタキーに対して新しい列を持つオプションがあります。 – ArturoO
WordPressには一般的なテーブルが必要です。クエリーが遅すぎたり複雑すぎたりする場合は、 'xusers(id、name、weight、sex)'などのシャドウテーブルを作成し、トリガーでそれらを埋めることができます。しかし、私はこれが本当に必要かどうか二度考えます。 –