我有兩個表Schools
和Users
MySQL來獲取相關用戶
表學校
-----------------------------------------------------
| 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 |
____________________
在schools
表中的userID
字段是一個外鍵id
字段在users
表中。我想編寫一個MySQL語句,它需要一個給定的userID
並列出該用戶的所有同學。
因此,對於上面的例子中,User A
(ID#1)的一類伴侶是去到同一學校作爲User A
用戶,位於同一city
,並且具有相同的major
。因此,User A
的有效同學只有User B
(ID#2)和User C
(ID#3)。
現在,我正在使用兩個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的右側列表。但是,我想知道是否有一種更有效的方法在一個SQL語句中執行此操作,而無需使用PHP。
請重新設計您的表格。他們沒有正常化,可能會陷入許多致命的事情....看到這裏:http://stackoverflow.com/a/11363740/561731和相關評論下的OP – Neal 2012-07-06 15:56:45
這是另一個可能有所幫助的評論:http:///stackoverflow.com/questions/11363688/mysql-select-women-not-men/11363740#comment14970233_11363688 – Neal 2012-07-06 15:59:13