【发布时间】:2019-02-23 17:39:21
【问题描述】:
我不明白为什么这个查询是错误的。我单独尝试了真假查询并且它有效,但是当我将它们放在 if 子句中时它没有。提前感谢您的帮助:)
SELECT
IF (
(SELECT useronline FROM wp_livechat ORDER BY id DESC LIMIT 1) = 1
,
(SELECT *
FROM wp_livechat
WHERE id >= (SELECT id
FROM wp_livechat
WHERE useronline = 0
ORDER BY id DESC
LIMIT 0, 1)
AND id <= (SELECT id
FROM wp_livechat
WHERE useronline = 1
ORDER BY id DESC
LIMIT 0, 1)
),
(SELECT *
FROM wp_livechat
WHERE id >= (SELECT id
FROM wp_livechat
WHERE useronline = 0
ORDER BY id DESC
LIMIT 1, 1)
AND id <= (SELECT id
FROM wp_livechat
WHERE useronline = 0
ORDER BY id DESC
LIMIT 0, 1)
)
);
编辑:这是表格:https://ibb.co/huri6e
我想从最后一个 useronline = 0 到最前面的 useronline = 0 获取消息。如果最后一个条目是 useronline = 1,那么我想从最后一个 useronline = 1 到最后一个条目中检索消息useronline = 0 的条目。
【问题讨论】:
-
你想在这个查询中实现什么?看起来很复杂。我相信这里使用了不止一列。但很难追踪
-
在您定义列的 SELECT 子句中,只能有值。您在子查询中使用
SELECT *,这是不可能的。 -
但是当我单独运行这个查询时,它可以工作: SELECT * FROM wp_livechat WHERE ID >= (SELECT ID FROM wp_livechat WHERE useronline = 0 ORDER BY id DESC LIMIT 1, 1) AND ID
-
我编辑并缩进了您的查询。它有助于理解正在发生的事情,因为它更易于阅读和找出每个查询的开始和结束。至于您的最后一条评论,您可以将其添加到您的问题中,并适当缩进。 cmets 中的代码很难阅读,因为您无法对其进行格式化。见How to Ask 和minimal reproducible example。
-
在编写这样的长查询之前学习一些 SQL 语法。你的语法甚至无效。
标签: mysql database if-statement select