php – MySQL减去两列并将它们与WHERE子句中的数字进行比较
我有一个看起来像这样的表:
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 我正在尝试根据time-waste_time列的结果将数据从中呈现为多个< table> s. 这些是我的疑问: 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 <1. 0和第三个查询将不会显示此类播放器. 我已经找到了这个答案:Using ‘Greater than’ operator with a negative number但它没有帮助. 任何想法为什么它是这样的,我怎么能让它工作? Ps.:logged_in是ZERO 谢谢. 解决方法
看起来如果你使用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",246,0); INSERT INTO myTable (name,logged_in) VALUES ("test2",360,logged_in) VALUES ("test3",116,logged_in) VALUES ("test4",291,199,logged_in) VALUES ("test5",3997,520,logged_in) VALUES ("test6",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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |