Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/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条件:case when和LEFT join不能使它们正常工作_Mysql - Fatal编程技术网

Mysql条件:case when和LEFT join不能使它们正常工作

Mysql条件:case when和LEFT join不能使它们正常工作,mysql,Mysql,到目前为止,我已经做到了: SELECT l.logo_id, l.logo_image_path, l.logo_lang, (1) AS answered FROM logos l WHERE l.logo_level = $level" 如果用户回答了此问题,我希望答案显示1,如果用户未回答此问题,则显示0。结果存储在包含r.logo\u id r.user\u id的结果表中 我试过: (CASE WHEN l.logo_id = r.logo_id T

到目前为止,我已经做到了:

SELECT
    l.logo_id,
    l.logo_image_path,
    l.logo_lang,
    (1) AS answered
FROM logos l
WHERE l.logo_level = $level"
如果用户回答了此问题,我希望答案显示1,如果用户未回答此问题,则显示0。结果存储在包含r.logo\u id r.user\u id的结果表中

我试过:

(CASE WHEN l.logo_id = r.logo_id THEN 1 ELSE 0 END) AS answered
但它不起作用,显然我缺少results表和user\u id检查,因为我希望当前用户发生这种情况,所以我必须添加r.user\u id=$user\u data[0]['user\u id']

你能帮我吗?并且一步一步地解释,这样我最终会明白:


ty.

假设徽标是您的问题表,结果是您的答案表,每个用户在结果表上有0到多行,每个回答的问题对应一行,然后类似这样:-

$sql = "SELECT
    l.logo_id,
    l.logo_image_path,
    l.logo_lang,
    CASE WHEN r.logo_id IS NULL THEN 0 ELSE 1 END AS answered
FROM logos l
LEFT OUTER JOIN results r
ON l.logo_id = r.logo_id
AND  r.user_id = ".$user_data[0]['user_id']."
WHERE l.logo_level = ".$level;

请把这张桌子寄出去好吗?试图找出r表别名所指的内容to@Kickstart表r是Results我不知道你写了什么,但我认为r.user\u id=$user\u data[0]['user\u id']应该是有条件的,当不是完整选择时。有些问题可能无法回答,结果表中也不会显示任何内容,因为有条件。。。我可能错了:我也不明白你的问题。如果您能在问题中提供更多关于属性的信息,也许会更好:对不起,我不明白您所写的内容——我的意思是我对mysql语句了解很少,所以我猜大多数情况下……这非常有效。但我不明白为什么。。。让我困惑的是r.user\u id=.$user\u data[0]['user\u id']。我期待这一点,并做一些事情,如l.logo_level=.$level;它使用左连接。对r.user_id的检查在该联接的ON子句中。这样,它将只针对该用户的结果表上的记录进行连接。如果您在WHERE子句中检查了r.user_id,则它将执行联接,然后排除不属于该用户id的记录。但是,如果没有匹配的记录,则作为左联接,该字段中的值将为null,当用户未回答该问题时,您将为用户id未回答的问题排除行。很高兴它回答了。我在评论中竭力解释这一点
$sql = "SELECT
    l.logo_id,
    l.logo_image_path,
    l.logo_lang,
    CASE WHEN r.logo_id IS NULL THEN 0 ELSE 1 END AS answered
FROM logos l
LEFT OUTER JOIN results r
ON l.logo_id = r.logo_id
AND  r.user_id = ".$user_data[0]['user_id']."
WHERE l.logo_level = ".$level;