![](/img/trans.png)
[英]mysql query apply condition to where clause only if certain condition satisfied
[英]How to apply IF condition with WHERE CLAUSE in this Query Using MySql
這是我的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;
我在這個查詢中做錯了什么?
試試這個 -
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;
好吧,看起來你通過這些IF
比較x和x。
x = x“始終”為真。
使用CASE WHEN THEN ELSE END構造。 你可以閱讀更多關於它在這里的文檔。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.