gpt4 book ai didi

mysql - 复杂的sql查询返回结果为空表

转载 作者:行者123 更新时间:2023-11-29 13:07:31 29 4
gpt4 key购买 nike

我有三张空 table

--
-- Tabellenstruktur für Tabelle `projects`
--

CREATE TABLE IF NOT EXISTS `projects` (
`id_project` int(11) NOT NULL AUTO_INCREMENT,
`id_plan` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`description` longtext NOT NULL,
PRIMARY KEY (`id_project`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `project_plans`
--

CREATE TABLE IF NOT EXISTS `project_plans` (
`id_plan` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` longtext NOT NULL,
`max_projects` int(11) DEFAULT NULL,
`max_member` int(11) DEFAULT NULL,
`max_filestorage` bigint(20) NOT NULL DEFAULT '3221225472' COMMENT '3GB Speicherplatz',
PRIMARY KEY (`id_plan`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `project_users`
--

CREATE TABLE IF NOT EXISTS `project_users` (
`id_user` int(11) NOT NULL,
`id_project` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

所有这些表都是空的,但我的查询得到了结果?我的查询:

SELECT
A.id_plan,
A.name AS plan_name,
A.description AS plan_description,
A.max_projects,
A.max_member,
A.max_filestorage,
B.id_plan,
B.name AS project_name,
B.description AS project_description,
C.id_user,
C.id_project,
COUNT(*) AS max_project_member
FROM
".$this->config_vars["projects_plans_table"]." AS A
LEFT JOIN
".$this->config_vars["projects_table"]." AS B
ON
B.id_plan = A.id_plan
LEFT JOIN
".$this->config_vars["projects_user_table"]." AS C
ON
C.id_project = B.id_project
WHERE
C.id_project = '".$id."'
&& B.deleted = '0'

我认为问题是 COUNT (*) AS ...

如何解决这个问题?

最佳答案

首先,由于 COUNT(),您将明确获得一条记录。即使您没有记录,您也会询问引擎有多少记录,在最坏的情况下将返回零。 Count() 与其他聚合一样,预计会有一个分组依据,因此即使您没有分组依据,您仍然会询问。

所以引擎基本上是在说嘿...没有记录,但我必须向您发送一条记录,以便您可以获取 count() 列来查看并执行您想要的操作。所以,它正在按照您的要求进行操作。

现在,对于您提出的其他问题的评论...

是的,但我想计算项目中的项目成员,我如何计算project_users中的用户,其中所有用户都有id_project 1。

由于您只关心计数,而不关心涉及的具体 WHO,因此您可以直接从 project_users 表中获取此结果(该表应该在 ID_User 上有一个索引,在 ID_Project 上也应该有另一个索引。然后

select count(*) 
from project_users
where id_project = 1

要从原始问题的基础上进行扩展以获取额外的详细信息,我会...

select
p.id_project,
p.id_plan,
p.name as projectName,
p.description as projectDescription,
pp.name as planName,
pp.description as planDescription,
pp.max_projects,
pp.max_member,
pp.max_filestorage,
PJCnt.ProjectMemberCount
from
( select id_project,
count(*) as ProjectMemberCount
from
project_users
where
id_project = 1 ) PJCnt
JOIN Projects p
on PJCnt.id_project = p.id_project
JOIN Project_Plans PP
on p.id_plan = pp.id_plan

现在,根据此表布局,计划可以具有最大成员数,但没有任何内容指示基于所有项目的计划的最大成员数或每个单个项目的最大成员数。那么,如果一个计划允许20人,那么同一个计划下的10个不同项目可以有20人吗?只有您才能知道其影响...只是需要考虑您的要求。

关于mysql - 复杂的sql查询返回结果为空表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22514585/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com