gpt4 book ai didi

mysql - 仅使用 MySql 就可以实现这样的事情吗?

转载 作者:可可西里 更新时间:2023-11-01 08:31:40 25 4
gpt4 key购买 nike

我遇到了这个查询。

SELECT 
f.*
FROM
siv_forms f
WHERE
f.urlname = 'test_form_custom_url'
AND f.active = 1
AND find_in_set(50, f.siteIds)
AND f.endDate > 1404307448
IF (f.max_responses > 0) THEN
AND (SELECT COUNT(fr.id) as count FROM siv_forms_responses fr WHERE formId = f.id) > f.max_responses
END IF

基本上,如果 f.max_responses 大于 0,我只想包含最后一个 AND 条件。

我可以使用一些单独的查询和 PHP 来完成此操作,但我正在尝试减少我必须执行的查询量。

最佳答案

A CASE 表达式应该可以解决问题。我目前无法对此进行测试,但以最简单的形式进行测试:

SELECT 
f.*
FROM
siv_forms f
WHERE
f.urlname = 'test_form_custom_url'
AND f.active = 1
AND find_in_set(50, f.siteIds)
AND f.endDate > 1404307448
AND (SELECT COUNT(fr.id) as count
FROM siv_forms_responses fr
WHERE formId = f.id) > CASE
WHEN f.max_responses > 0 THEN f.max_responses
ELSE -1
END CASE

你必须在 ELSE 中有点创意部分。我用了-1在这里,但我不确定你想在 f.max_responses <= 0 时发生什么.你基本上在这里做的是说:x必须大于 y如果y > 0 , 否则 x必须大于 -1 .

也许您可以将整个条件包装在 CASE 中陈述。不确定这是否可行(因为我目前无法测试):

  AND CASE
WHEN f.max_responses > 0 THEN
(SELECT COUNT(fr.id) as count
FROM siv_forms_responses fr
WHERE formId = f.id) > f.max_responses
ELSE TRUE
END CASE

关于mysql - 仅使用 MySql 就可以实现这样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24532505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com