Mysql 查询优化问题
我有两个查询-一个是通过知道Mysql 查询优化问题,mysql,sql,Mysql,Sql,我有两个查询-一个是通过知道post\u id来选择group\u id,另一个是检查用户是否在该组中。我试图优化他们-把他们放在一起,但现在抛出一个错误 SELECT COUNT(bio_community_group_members.id) AS count FROM `bio_community_group_members` JOIN `bio_community_posts` ON (`bio_community_posts`.`id` = `180`) WHERE `bio_c
post\u id
来选择group\u id
,另一个是检查用户是否在该组中。我试图优化他们-把他们放在一起,但现在抛出一个错误
SELECT COUNT(bio_community_group_members.id) AS count
FROM `bio_community_group_members`
JOIN `bio_community_posts`
ON (`bio_community_posts`.`id` = `180`)
WHERE `bio_community_group_members`.`group_id` = 'bio_community_posts.group_id'
AND `bio_community_posts`.`user_id` = '34'
它说:
“on子句”中的未知列“180”
问题:我有那个条目
表结构:
生物社区帖子
:
id
用户id
组id
- 其他东西李>
生物社区成员
:
id
用户id
组id
状态
- 其他东西李>
bio_community_group_成员
中检索状态
(如果存在)。那个count
事情只是因为我不知道如何开始构建我的查询(
谢谢你的建议
编辑:
嗯……现在它可以工作了……但是你知道如何优化这两个查询并得到一个同时选择状态的查询吗
SELECT `group_id`
FROM `bio_community_posts`
WHERE `id` = 180
SELECT COUNT(id) AS count
FROM `bio_community_group_members`
WHERE `group_id` = 41
AND `user_id` = '34'
编辑#2:
这就是我想要的:
SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_group_members`.`group_id` = 41
AND `bio_community_group_members`.`user_id` = '34'
AND `bio_community_posts`.`id` = '180'
GROUP BY `bio_community_group_members`.`status`
谢谢!:)
编辑#3:
我想我需要这样的东西
SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members.group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'
但是:
[Err]1054-在“on子句”中未知列“bio_community_group_members.group_id”
编辑#4:
刚刚在查询中发现一个bug。以下是最终解决方案:
SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'
拆下180周围的`按钮
ON (`bio_community_posts`.`id` = 180)
拆下180周围的`按钮
ON (`bio_community_posts`.`id` = 180)
去掉180的反引号(?),我想你是说180?同时删除其他列名周围的单引号,如下所示:
SELECT COUNT(bio_community_group_members.id) AS count
FROM `bio_community_group_members`
JOIN `bio_community_posts`
ON (`bio_community_posts`.`id` = '180') -- Replaced back- with single-quotes.
WHERE `bio_community_group_members`.`group_id` = `bio_community_posts.group_id` -- Replaced single- with back-quotes.
AND `bio_community_posts`.`user_id` = '34'
操作编辑后编辑:
我不确定你在寻找什么样的优化,但我猜是这样的
SELECT COUNT(id) AS count, status
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_group_members`.`group_id` = 41
AND `bio_community_group_members`.`user_id` = '34'
AND `bio_community_posts`.`id` = '180'
GROUP BY `bio_community_group_members`.`status`
评论后编辑:
修正了你的编辑3:
SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'
去掉180的反引号(?),我想你是说180?同时删除其他列名周围的单引号,如下所示:
SELECT COUNT(bio_community_group_members.id) AS count
FROM `bio_community_group_members`
JOIN `bio_community_posts`
ON (`bio_community_posts`.`id` = '180') -- Replaced back- with single-quotes.
WHERE `bio_community_group_members`.`group_id` = `bio_community_posts.group_id` -- Replaced single- with back-quotes.
AND `bio_community_posts`.`user_id` = '34'
操作编辑后编辑:
我不确定你在寻找什么样的优化,但我猜是这样的
SELECT COUNT(id) AS count, status
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_group_members`.`group_id` = 41
AND `bio_community_group_members`.`user_id` = '34'
AND `bio_community_posts`.`id` = '180'
GROUP BY `bio_community_group_members`.`status`
评论后编辑:
修正了你的编辑3:
SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'
去除背虱。示例:id=180。删除背面记号。示例:id=180.Hmm。。。该死不完全是。我需要通过只知道user\u id
和post\u id
来了解用户状态。只需要一个查询就可以了吗?我需要获取该组中用户的访问级别(称为状态
)。Post可以位于一个组下,关系为group\u id
<代码>组成员
有用户id
,组id
和状态
我需要获取。您的示例返回许多状态:(我只需要为该用户获取一个!我知道post\u id
和user\u id
@daGrevis好的,您上次的编辑只有一个语法错误,请参阅我的修复。嗯……该死。不完全是。我只需要知道user\u id
和post\u id
,就可以了吗?我需要获得访问级别。)(称为status
)用于该组中的用户。Post可以位于一个组下,关系为group\u id
group\u成员
具有user\u id
,group\u id
和我需要获取的状态。您的示例返回许多状态:(我只需要为该用户获取一个!我知道post\u id
和user\u id
@daGrevis好的,您上次的编辑只有一个语法错误,请参阅我的修复。