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好的,您上次的编辑只有一个语法错误,请参阅我的修复。