【发布时间】:2012-12-03 17:42:25
【问题描述】:
我的查询有问题,你能告诉我哪里错了吗?
我有 3 张桌子:
用户:
`users` (
`id` int(11) AUTO_INCREMENT,
`first_name` varchar(16),
`last_name` varchar(16)
`email` varchar(16)
`password` varchar(32)
`phone` varchar(13)
`age` tinyint(4)
`gender` varchar(6)
)
users_eyes:
`users_eyes` (
`user_id` int(4),
`user_eyescolor_id` tinyint(2),
UNIQUE KEY `user_id` (`user_id`,`user_eyescolor_id`)
)
users_eyestype:
`users_eyestype` (
`user_id` int(4),
`user_eyestype_id` tinyint(2),
UNIQUE KEY `user_id` (`user_id`,`user_eyestype_id`)
)
这是我的查询
SELECT
SQL_CALC_FOUND_ROWS
u.first_name,
u.last_name,
u.age,
u.gender,
u.phone,
u.id
, GROUP_CONCAT(DISTINCT ue.user_eyescolor_id SEPARATOR ' ' ) as eyes_color
, GROUP_CONCAT(DISTINCT uet.user_eyestype_id SEPARATOR ' ' ) as eyes_type
FROM users u
LEFT JOIN users_eyes ue ON u.id = ue.user_id
LEFT JOIN users_eyestype uet ON u.id = uet.user_id
WHERE
ue.user_eyescolor_id IN (1,2,3,4)
GROUP BY u.id
HAVING
COUNT(ue.user_id) = 4
结果是一个有 2 种眼睛的人,而不是这个有 4 种眼睛的人 在我加入和eyes_type之前,一切都刚刚好。
【问题讨论】:
-
你能告诉我们你的预期结果吗?如果您仍然需要解决方案,请告诉我。 :-)
-
SELECT u.id , GROUP_CONCAT(DISTINCT ue.user_eyescolor_id SEPARATOR ' ' ) as eyes_color , GROUP_CONCAT(DISTINCT uet.user_eyestype_id SEPARATOR ' ' ) as eyes_type FROM users u LEFT JOIN users_eyes ue ON u.id = ue.user_id LEFT JOIN users_eyestype uet ON u.id = uet.user_id WHERE ue.user_eyescolor_id IN (1,2,3,4) GROUP BY u.id HAVING COUNT(DISTINCT ue.user_eyescolor_id) = 4 那解决了我的问题,选择拥有所有眼睛颜色的人
-
现在唯一的问题是当我在一个查询中加入 5-6 个和更多表时,需要这样做。完成我的查询需要很长时间