Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在选择期间,确定另一个表中的相关行数(0-n)_Mysql_Sql - Fatal编程技术网

Mysql 在选择期间,确定另一个表中的相关行数(0-n)

Mysql 在选择期间,确定另一个表中的相关行数(0-n),mysql,sql,Mysql,Sql,**编辑** 我使用了第一个答案中的查询,但最终不得不修改它,因为如果没有任何会话,它不会返回多个调查。我终于解决了这个问题: (SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor, i.active AS active, i.length AS length, i.redirect AS redirect, COUN

**编辑**

我使用了第一个答案中的查询,但最终不得不修改它,因为如果没有任何会话,它不会返回多个调查。我终于解决了这个问题:

(SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
                     i.active AS active, i.length AS length, i.redirect AS redirect,
                     COUNT(s.sid) AS number
                FROM survey_info i
                LEFT JOIN survey_sessions s ON s.sid = i.id
                INNER JOIN survey_category c ON i.category = c.id
                WHERE s.sid IS NOT NULL
                GROUP BY s.sid)
                UNION ALL
                (SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
                       i.active AS active, i.length AS length, i.redirect AS redirect,
                       0 AS number
                FROM survey_info i
                LEFT JOIN survey_sessions s ON s.sid = i.id
                INNER JOIN survey_category c ON i.category = c.id
                WHERE s.sid IS NULL)
                ORDER BY 2
它从下面获取查询,只返回有会话(已进行)的调查,然后使用UNION ALL子句将这些结果与SELECT组合,SELECT只检索没有会话(未进行)的调查。最后,它按第二列(调查标题)对组合结果进行排序

我希望这对其他人有所帮助。

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

我一直在做一个调查项目,让人们创建和管理调查。昨天我问了一个关于存储结果的问题,我意识到我做的都是错的(为每次调查都创建额外的表格)

我现在有了一个新的表格结构,它工作得更好,让我一直保持在6张桌子上。 我有一个新的进退两难的问题,我整晚都在努力,希望有人能给我指出正确的方向

我的表格如下:

调查信息

id(bigint)        PK
title(varchar)
category(bigint)
length(bigint)
active(tinyint)
调查类别

id(bigint)        PK
title(varchar)
color(varchar)
调查会议

id                PK
timestamp(bigint)
我最初使用以下SQL来收集调查及其会话数(所用时间)

但是,正如您可能已经猜到的,这意味着每当我创建一个新的调查(从未进行过调查)时,它都不会显示在此列表中,因为在survey_session表中没有该调查的条目


当survey_会话中没有行时,是否可以使用MySQL中的条件语句返回0来代替“COUNT(s.sid)AS number”?我已经读了很多关于左连接的文章,但我认为它们不会起作用,因为没有任何东西可以将新调查连接到survey_sessions表。

以下是您的查询被重写为
左连接到
survey_sessions
。你应该能够很容易地检查它是否适合你

SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
    i.active AS active, i.length AS length, i.redirect AS redirect,
    COUNT(s.sid) AS number
FROM survey_info i
INNER JOIN survey_category c ON i.category = c.id
LEFT JOIN survey_sessions s ON s.sid = i.id
GROUP BY s.sid

这不是很像吗?这确实有效!如果允许的话(3分钟),我会接受它作为答案。
SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
    i.active AS active, i.length AS length, i.redirect AS redirect,
    COUNT(s.sid) AS number
FROM survey_info i
INNER JOIN survey_category c ON i.category = c.id
LEFT JOIN survey_sessions s ON s.sid = i.id
GROUP BY s.sid