你是绝对正确的,它是一个多对多的查询。 从我的理解,你正在寻找的是具有某种分层结果显示的能力,这意味着对于一个用户来说,他有一个所有类别的分配给他...
夫妇事情可以做: 选项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