Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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子查询只返回一行_Mysql_Sql - Fatal编程技术网

mysql子查询只返回一行

mysql子查询只返回一行,mysql,sql,Mysql,Sql,我有一个返回多行的查询: SELECT c.id AS courseID, c.fullname AS courseName, c.continuingeducationcredits AS cec, cc.name AS catName, IFNULL(ccp.name, '-No Parent Category-') AS catParent, ue.userid AS userID, CONCAT(u.firstname, ' ', u.lastname

我有一个返回多行的查询:

SELECT c.id AS courseID,
   c.fullname AS courseName,
   c.continuingeducationcredits AS cec,
   cc.name AS catName,
   IFNULL(ccp.name, '-No Parent Category-') AS catParent,
   ue.userid AS userID,
   CONCAT(u.firstname, ' ', u.lastname) AS name,
   ud.data AS employeeid,
   date_format(date_add('1970-01-01',interval round(c.startdate/60/60/24) DAY), '%m/%d/%Y') AS startdate,
   u.id AS uid,
   c.startdate AS cstartdate
FROM user_enrolments AS ue
INNER
    JOIN USER AS u ON ue.userid = u.id
INNER JOIN user_info_data AS ud ON (ud.fieldid = 1
                                      AND ud.userid = u.id)
INNER JOIN enrol AS e ON e.id = ue.enrolid
INNER JOIN course AS c ON c.id = e.courseid
INNER JOIN course_categories AS cc ON cc.id = c.category
LEFT
    OUTER JOIN course_categories AS ccp ON ccp.id = cc.parent
WHERE 1 = 1
  AND (cc.ID = 13
       OR ccp.ID = 13)
ORDER BY catParent,
         uid,
         cstartdate DESC
这可以正常工作,并返回多行。但如果我尝试将其用作子查询:

SELECT *
FROM
  (SELECT c.id AS courseID,
          c.fullname AS courseName,
          c.continuingeducationcredits AS cec,
          cc.name AS catName,
          IFNULL(ccp.name, '-NO Parent Category-') AS catParent, ue.userid AS userID, CONCAT(u.firstname, ' ', u.lastname) AS name,
          ud.data AS employeeid,
          date_format(date_add('1970-01-01',interval round(c.startdate/60/60/24) DAY), '%m/%d/%Y') AS startdate,
          u.id AS uid,
          c.startdate AS cstartdate
   FROM user_enrolments AS ue
   INNER JOIN USER AS u ON ue.userid = u.id
   INNER JOIN user_info_data AS ud ON (ud.fieldid = 1
                                       AND ud.userid = u.id)
   INNER JOIN enrol AS e ON e.id = ue.enrolid
   INNER JOIN course AS c ON c.id = e.courseid
   INNER
    JOIN course_categories AS cc ON cc.id = c.category
   LEFT OUTER JOIN course_categories AS ccp ON ccp.id = cc.parent
   WHERE 1 = 1
     AND (cc.ID = 13
          OR ccp.ID = 13)) AS Pseudotable
WHERE courseID = 8946
ORDER BY catParent,
         uid,
         cstartdate DESC
它将只返回一行

我做错了什么(

第一个查询是第二个查询的内部查询


第一个查询获取类别中所有参加课程的用户。第二个查询用于筛选该集合,并仅获取参加单个课程的用户。

由于第一个查询中没有的
WHERE
条件,您在第二个查询中有一行

WHERE courseID = 8946

您有
WHERE courseID=8946
,为了公平起见,您正在将查询缩减为一个ID

。。我对这个答案的评论是:)


在第二个查询中。删除它,它就会工作。

我终于解决了问题。。。应用程序是Moodle,它使用一个名为get_records_sql的函数将查询加载到数组中

它要求结果的第一行是唯一的键。它使用该行作为数组的索引

所以。。。要做到这一点:

像这样开始选择-

SELECT @a:=@a+1 as serial_number, c.id as courseID,
并将其添加到FROM子句中-

LEFT OUTER JOIN mdl_course_categories AS ccp ON ccp.id = cc.parent, (SELECT @a:= 0) AS a WHERE

您能否将查询简化为核心问题?有关您编写的代码问题的问题必须在问题本身中描述具体问题,并包括重现问题的有效代码。请参阅以获取指导。这是因为:
WHERE courseID=8946
删除该选项,并查看它是否有效。下次直接将其作为答案发布。因为没有必要三次发布相同的答案;)@是的,我应该更清楚。干杯。我确实需要按课程筛选,但结果中应该有多个用户。第一个查询是第二个查询的内部查询。第一个/内部查询列出所选类别中参加课程的所有用户。第二个外部查询将其缩小为一个课程。问题是在最终的外部查询结果中只有一个用户。@GregHolmes当内部/第一个查询执行时。。。你确定在课程号为8946的地方有不止一个吗?因为如果真的有,这似乎是不可能的。是的,我肯定。有三个。
LEFT OUTER JOIN mdl_course_categories AS ccp ON ccp.id = cc.parent, (SELECT @a:= 0) AS a WHERE