MySQL ORDER BY结合LIMIT 1返回空结果

时间:2014-11-03 15:07:53

标签: php mysql typo3

我们确实有一个脚本,如果符合某些条件,它会自动将池中的哈希值插入到文章中。这样做的扩展是几年前编写的,到目前为止运作良好。 现在它停止工作,没人知道原因。经过长时间的调试后,我在SQL语句中发现了错误。

生成的语句如下所示:

SELECT `hash` 
FROM `table` 
WHERE `is_used` =0
ORDER BY `uid`
LIMIT 1

如果我只删除" ORDER BY uid",它又会再次运行。我只是想知道为什么这件事发生了。主持人表示系统方面没有更改/更新,我检查了所有相关文件,去年没有更改过。

关于系统。 TYPO3 4.5.2 PHP Version 5.3.8-1~docdeb.1 MySQL版本5.1.57

提前致谢

编辑: 对困惑感到抱歉。 随着"停止工作"我的意思是,从一天到另一天,没有任何哈希插入到文章中。 当我使用ORDER BY执行语句时,我得到一个空行作为结果。 uid列仍然存在。系统上没有任何更改,包括数据库及其表。 我已经附加了一个带有表格结构的图像,并且两个查询结果都在右侧(好吧,它并没有真正附加,因为我需要更多的声誉来附加它)。

再次澄清我的问题:查询之前有效并返回哈希值。现在它只有在我删除ORDER BY时才有效,我想知道这是怎么发生的,因为我很好奇,它可以帮助我解决未来的错误。 http://i.stack.imgur.com/Dpip4.png

P.S。:我已经编辑了表名,不要害怕;)

2 个答案:

答案 0 :(得分:2)

查看您的屏幕打印,无论您是否拥有order by子句,都会返回一行。

您使用LIMIT 1仅返回单个记录。当你有order by子句时,你带回最低uid的记录。它恰好有一个空白的哈希值(可能在某个时候设置错误)。

我很想检查WHERE子句中的哈希值是否为空。

SELECT `hash` 
FROM `table` 
WHERE `is_used` =0
AND `hash` != ''
ORDER BY `uid`
LIMIT 1

答案 1 :(得分:0)

我现在感觉很傻。当然这是一个简单的答案,系统并没有停止工作"。 @Kickstart是对的,表中有一个空行。我没有正确检查桌子。 当我在PhpMyAdmin中打开它时,由于某种原因它没有被uid命令(其他的默认情况下由uid命令)。 我点击了uid字段并立即看到了空行。 http://i.stack.imgur.com/Vpco7.png

谢谢大家的帮助,并告诉我,我不是疯了,只是盲目;)

默认情况下,我要查看导入脚本以忽略空字段。永远不要相信你自己没有写过的系统^^

相关问题