私は2つのテーブルを持っていてSchools
、Users
テーブルスクール
-----------------------------------------------------
| id | name | city | major | userID |
----------------------------------------------------|
| 1 | school A | chicago | CS | 1 |
----------------------------------------------------|
| 2 | school B | chicago | CS | 1 |
----------------------------------------------------|
| 3 | school A | chicago | CS | 2 |
----------------------------------------------------|
| 4 | school C | chicago | Art | 2 |
----------------------------------------------------|
| 5 | school B | chicago | CS | 3 |
----------------------------------------------------|
| 6 | school D | chicago | Math | 3 |
----------------------------------------------------|
| 7 | school A |New York | CS | 3 |
----------------------------------------------------|
| 8 | school B | chicago | Art | 3 |
-----------------------------------------------------
テーブル ユーザー
--------------------
| id | name |
____________________
| 1 | User A |
____________________
| 2 | User B |
____________________
| 3 | User C |
____________________
| 4 | User D |
____________________
| 5 | User E |
____________________
テーブル内のuserID
フィールドは、テーブル内のフィールドschools
への外部キーです。指定された を取り、そのユーザーのすべてのクラスメートをリストする MySQL ステートメントを書きたいと思います。id
users
userID
したがって、上記の例では、 User A
(ID#1) のクラスメートは、 と同じ学校に通い、同じUser A
に所在し、同じcity
を持っているユーザーですmajor
。したがって、有効なクラスメートUser A
はUser B
(ID#2) AND User C
(ID#3) のみです。
現在、この目標を達成するために 2 つの MySQL ステートメントを使用しています。一枚目はこれ
SELECT id FROM schools WHERE userID = '1'
のすべての学校を一覧表示しますUser A
。次に、PHP を使用して結果をループ処理し、行ごとに次を実行します。
SELECT userID from schools WHERE
name city LIKE '%$chicago%'
AND name LIKE '%$school A%'
AND major LIKE '%$CS%'
これは正常に機能し、ユーザー ID の正しいリストを返します。ただし、PHP を使用せずに 1 つの SQL ステートメントでこれを行うより効率的な方法があるかどうか疑問に思っています。