gpt4 book ai didi

php - SQL 中 WHERE AND 之间的 IF ELSE 语句

转载 作者:可可西里 更新时间:2023-11-01 07:37:14 25 4
gpt4 key购买 nike

我为此搜索了几个小时,但到目前为止似乎没有任何效果。

我正在尝试按上次事件对我的论坛主题进行排序。所以我正在搜索上一个事件的主题和 react 。在添加新主题之前,一切似乎都正常。

这是我当前的代码,是的,我明白为什么它不起作用,但我似乎真的无法修复它。

SELECT a.forum_topic_id, a.title, a.sticky, a.date_changed, b.date_changed 
FROM forum_topics AS a, forum_reactions AS b
WHERE a.forum_subcat_id = ".$fsubcatid."
AND (a.forum_subcat_id = ".$fsubcatid." AND a.forum_topic_id = b.forum_topic_id)
OR (a.forum_subcat_id = ".$fsubcatid.")
ORDER BY
CASE WHEN a.date_changed < b.date_changed THEN b.date_changed WHEN a.date_changed > b.date_changed THEN a.date_changed END
DESC;");

如你所见。 a.forum_subcat_id 不能是 b.forum_topic_id 当一个新话题时,因为还没有反应。这就是它出错的地方。对于所有有反应的主题,他必须查看以下内容:

WHERE a.forum_subcat_id = ".$fsubcatid." AND a.forum_topic_id = b.forum_topic_id ORDER BY ...

对于所有新主题,他只需要看这个:

WHERE a.forum_subcat_id = ".$fsubcatid." ORDER BY...

在前端部分,我使用 foreach 循环 PHP 来获取它。所以对于每个主题,他都必须搜索这些东西。

到目前为止,我已经浏览了这些链接:

最佳答案

我认为您需要一个左外连接。通常,最好使用显式 join 语法:

SELECT a.forum_topic_id, a.title, a.sticky, a.date_changed, b.date_changed 
FROM forum_topics AS a left outer join
forum_reactions AS b
on a.forum_topic_id = b.forum_topic_id
WHERE a.forum_subcat_id = '".$fsubcatid."'
ORDER BY CASE WHEN a.datum_gewijzigd < b.datum_gewijzigd THEN b.datum_gewijzigd
WHEN a.datum_gewijzigd > b.datum_gewijzigd THEN a.datum_gewijzigd
END DESC;

请注意,order by 不考虑不匹配。对于这种情况,您可能需要一个条件 ,其中 b.datum_gewijzigd 为 null

编辑:

正如我在注释中提到的,您需要修改 order by 以首先获取具有no react 的内容。我认为这可能是您想要的:

ORDER BY CASE WHEN a.datum_gewijzigd < b.datum_gewijzigd THEN b.datum_gewijzigd
WHEN a.datum_gewijzigd > b.datum_gewijzigd THEN a.datum_gewijzigd
ELSE a.datum_gewijzigd
END DESC;

关于php - SQL 中 WHERE AND 之间的 IF ELSE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113832/

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