【问题标题】:mysql query showing error: #1241 - Operand should contain 1 column(s)mysql 查询显示错误:#1241 - 操作数应包含 1 列
【发布时间】:2018-06-29 17:28:53
【问题描述】:

Mysql查询,

SELECT qcat.name,
COUNT( CASE WHEN qas.state = "todo" THEN 1 END ) AS gtotal,
COUNT( CASE WHEN qas.state = "gradedright" THEN 1 END ) AS rightanswer, 
COUNT( CASE WHEN qas.state = "gradedwrong" THEN 1 END ) AS wronganswer, 
SUM(qas.fraction) AS grade,
quiza.id 
FROM mdl_quiz_attempts quiza
JOIN mdl_question_attempts qa ON qa.questionusageid = quiza.uniqueid 
JOIN mdl_question_attempt_steps qas ON qas.questionattemptid = qa.id 
JOIN mdl_question qstn ON ( qa.`questionid` = qstn.id ) 
JOIN mdl_question_categories qcat ON ( qstn.`category` = qcat.id ) 
WHERE quiza.id=1173 and FIND_IN_SET(qstn.id, (1,2,3,4,5,6)) GROUP BY quiza.id,qcat.name

显示错误:#1241 - 操作数应包含 1 列

【问题讨论】:

  • 尝试用FIND_IN_SET(qstn.id, 1,2,3,4,5,6)替换FIND_IN_SET(qstn.id, (1,2,3,4,5,6))(去掉括号)
  • 无法正常显示,#1582 - 调用本机函数 'FIND_IN_SET' 错误中的参数计数不正确
  • 我的错,尝试将FIND_IN_SET(qstn.id, (1,2,3,4,5,6)) 替换为FIND_IN_SET(qstn.id, '1,2,3,4,5,6')(以字符串形式列出)
  • 没有错误,但输出为空..谢谢
  • 好吧,你的错误就在哪里发生了。现在您需要编写一个返回数据的查询。

标签: php mysql moodle find-in-set


【解决方案1】:
SELECT qcat.name,
COUNT( CASE WHEN qas.state = "todo" THEN 1 END ) AS gtotal,
COUNT( CASE WHEN qas.state = "gradedright" THEN 1 END ) AS rightanswer, 
COUNT( CASE WHEN qas.state = "gradedwrong" THEN 1 END ) AS wronganswer, 
SUM(qas.fraction) AS grade,
quiza.id 
FROM mdl_quiz_attempts quiza
JOIN mdl_question_attempts qa ON qa.questionusageid = quiza.uniqueid 
JOIN mdl_question_attempt_steps qas ON qas.questionattemptid = qa.id 
JOIN mdl_question qstn ON ( qa.`questionid` = qstn.id ) 
JOIN mdl_question_categories qcat ON ( qstn.`category` = qcat.id ) 
WHERE quiza.id=1173 and FIND_IN_SET(qstn.id, "1,2,3,4,5,6") GROUP BY quiza.id,qcat.name

【讨论】:

  • 我认为您错过了字符串的位置,例如 " WHERE quiza.id=1173 和 @@position_of_string = FIND_IN_SET(qstn.id, "1,2,3,4,5,6") "
  • WHERE quiza.id=1173 and 1 = FIND_IN_SET(qstn.id, "1,2,3,4,5,6") GROUP BY quiza.id,qcat.name
  • 通过删除 where 子句中的 "and FIND_IN_SET(qstn.id, "1,2,3,4,5,6")" 来执行查询并检查您是否获得任何数据
  • @jatin-grover 这个答案似乎回答了您关于错误的具体问题。继续故障排除。尝试删除您的过滤器上下文 WHERE ... 语句并验证您期望的结果是否存在。如果没有,您需要查看您的加入声明。如果它们确实存在,请尝试编辑您的 where 语句。
【解决方案2】:

这是错误的:

FIND_IN_SET(qstn.id, (1,2,3,4,5,6))

应该是:

qstn.id IN (1,2,3,4,5,6)

或:

qstn.id BETWEEN 1 AND 6

FIND_IN_SET() 在值列表位于逗号分隔的字符串中时使用,IN 在查询中与文字列表一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2016-12-23
    • 1970-01-01
    • 2013-10-04
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多