这是我的MySQL查询,我在此查询中遇到周问题。我不知道如何使用WHERE
子句来应用IF条件。
查询:
SELECT
*,
IFNULL((SELECT ur.user_rating FROM user_rating ur
WHERE ur.vid_id = v.id AND ur.user_id = '1000'),'NULL') AS user_rating
FROM videos v
WHERE WEEK(v.video_released_date) = WEEK(NOW())
AND
v.`is_done` = 1
ORDER BY v.admin_listing ASC;
我想要OR(如何在where子句中应用此条件?)
IF( WEEK(v.video_released_date) = WEEK(NOW()) , WEEK(NOW()) , WEEK(NOW())-1)
=
IF( WEEK(v.video_released_date) = WEEK(NOW()) , WEEK(NOW()) , WEEK(NOW())-1)
简报
如果视频发布日期已过,且与当前周不符,则上周应用
我自己
当我像这样尝试自己时,他们会将整个数据返回给我
SELECT
*,
IFNULL((SELECT ur.user_rating FROM user_rating ur
WHERE ur.vid_id = v.id AND ur.user_id = '1000'),'NULL') AS user_rating
FROM videos v
WHERE IF(WEEK(v.video_released_date) = WEEK(NOW()),WEEK(NOW()),WEEK(NOW())-1)
= IF(WEEK(v.video_released_date) = WEEK(NOW()),WEEK(NOW()),WEEK(NOW())-1)
AND
v.`is_done` = 1
ORDER BY v.admin_listing ASC;
我在这个查询中做错了什么?
答案 0 :(得分:5)
试试这个 -
SELECT *,
IFNULL((SELECT ur.user_rating FROM user_rating ur
WHERE ur.vid_id = v.id AND ur.user_id = '1000'),'NULL') AS user_rating
FROM videos v
WHERE WEEK(v.video_released_date) = IF(WEEK(v.video_released_date) = WEEK(NOW()),WEEK(NOW()),WEEK(NOW())-1)
AND v.is_done = 1
ORDER BY v.admin_listing ASC;
答案 1 :(得分:1)
好像您通过这些IF
将x与x进行比较。
x = x“始终”为真。
答案 2 :(得分:1)
使用 CASE WHEN ELSE END 构造。您可以在文档中了解更多相关信息here。
SELECT *,
IFNULL((SELECT ur.user_rating FROM user_rating ur
WHERE ur.vid_id = v.id AND ur.user_id = '1000'),'NULL') AS user_rating
FROM videos v
WHERE
WEEK(v.video_released_date) =
CASE WHEN WEEK(v.video_released_date) = WEEK(NOW())
THEN WEEK(NOW()) ELSE WEEK(NOW())-1 END
AND
v.`is_done` = 1
ORDER BY v.admin_listing ASC;