gpt4 book ai didi

php - MySQL 减去两列并将它们与 WHERE 子句中的数字进行比较

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

我有一个看起来像这样的表:

id | some | irrelevant | data | time | waste_time | logged_in
--------------------------------------------------------------
1 | | | | 0 | 246 | 0
2 | | | | 0 | 360 | 0
3 | | | | 116 | 116 | 0
4 | | | | 291 | 199 | 0
5 | | | | 3997 | 520 | 0
6 | | | | 0 | 175 | 0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

我正在尝试将其中的数据呈现为多个 <table> s,基于 time - waste_time 的结果列。我以为我有它的工作,但我在我的代码中发现了一个错误。如果结果为负数,则将其与 0 ( time - waste_time > 0) 进行比较会被忽略。

这些是我的查询:

SELECT * FROM players WHERE time-waste_time > 0 OR logged_in=1 ORDER BY logged_in DESC, login DESC

SELECT * FROM players WHERE time-waste_time > 0 AND login < $time_limit ORDER BY login DESC

SELECT * FROM players WHERE time-waste_time <= 0 AND logged_in=0 ORDER BY login DESC

第一个查询将显示时间为 0 且 waste_time 为 150 的玩家,即使 0 - 150 = -150-150 < 0第三个查询不会显示这样的播放器。预期结果是,这样的播放器不会被第一次和第二次查询返回,但会被第三次返回。

我已经找到了这个答案:Using 'Greater than' operator with a negative number但这没有帮助。

有什么想法为什么会这样吗?我怎样才能让它发挥作用?

附: logged_in是零

谢谢。

最佳答案

看起来如果您使用 UNSIGNED 字段并且它们在 SQL 查询中的减法结果为负,它会给您错误,即使字段本身不包含负值也是如此。

您可以在 SQLFiddle 中尝试此代码.

链接:http://sqlfiddle.com/#!9/80bbc/1

CREATE TABLE myTable(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(200),
time INT(11) UNSIGNED,
waste_time INT(11) UNSIGNED,
logged_in TINYINT(3));

INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test1", 0, 246, 0);
INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test2", 0, 360, 0);
INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test3", 116, 116, 0);
INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test4", 291, 199, 0);
INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test5", 3997, 520, 0);
INSERT INTO myTable (name, time, waste_time, logged_in) VALUES ("test6", 0, 125, 0);

这个查询:

SELECT *
FROM myTable
WHERE time - waste_time > 0 OR logged_in = 1;

SELECT *
FROM myTable
WHERE time - waste_time <= 0 AND logged_in = 0;

现在,这是没有 UNSIGNED INT 字段的版本:http://sqlfiddle.com/#!9/f6dbd/1

修复它的方法是不使用 UNSIGNED 整数,或者在进行此类比较时,将结果转换为 SIGNED 整数

CAST((time - waste_time) AS SIGNED)

关于php - MySQL 减去两列并将它们与 WHERE 子句中的数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123646/

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