你是絕對正確的,它是一個多對多的查詢。 從我的理解,你正在尋找的是具有某種分層結果顯示的能力,這意味着對於一個用戶來說,他有一個所有類別的分配給他...
夫婦事情可以做: 選項1:查詢用戶表:
SELECT u.user_id, u.username, u.user_city WHERE city = 'somecity';
從結果來看,得到所有匹配的USER_ID的,把它們放在一個陣列。
array(1,3,4,5)
然後通過加入2個表類別和user_categories,以及使所述陣列作爲逗號在一個其中在分隔的列表執行的查詢:
SELECT user_categories.user_id, categories.category_name
FROM user_categories INNER JOIN categories ON user_categories.category_id = categories.category_id
WHERE user_categories.user_id IN (1,3,4,5)
這會給你用戶的列表ID,類別名稱,您可以在您的腳本中使用以前的結果來構建結果集
選項2:我的首選,使用MySQL的GROUP_CONCAT(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat)。
SELECT users.user_id, users.user_name, GROUP_CONCAT(categories.category_name) AS categories
FROM users
INNER JOIN user_categories ON users.id = users_categories.user_id
INNER JOIN categories ON user_categories.category_id = category.id
WHERE user.user_city = 'somecity'
GROUP BY user.user_id
這將返回類似:
user_id username categories
1 u1 cat1, cat2, cat3
2 u2 cat1, cat3
您可以通過在GROUP_CONCAT,使用隔板指定的分隔符。
但是,這將返回,用戶所屬的所有類別呢? – user281482 2010-02-25 18:48:57