【发布时间】:2019-02-01 23:44:04
【问题描述】:
所以,我知道关于在 SQL 数据库中获取随机行的问题已经发布(甚至不止一次),它帮助我得到了这个 SQL 查询:
"SELECT column FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT 1)";
如果我理解得很好,随机排序在大桌子上效率不高,但如果你将它与 id 一起使用,它就足够快了。
所以我试过了,它似乎工作得很好,但后来我想添加一个标准,所以我稍微改变了一下:
"SELECT column1 FROM table WHERE (column2 LIKE '" + value + "' AND id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT 1)";
为了更清楚,我有这个表:上传 =(id,文件名,所有者)。 我想从给定的所有者中选择一个随机文件名。这给了我:
"SELECT filename FROM uploaded WHERE (owner LIKE '" + owner + "' AND id IN (SELECT id FROM uploaded ORDER BY RANDOM() LIMIT 1))";
问题是:有时,rs.next 是错误的(这意味着我没有结果)。但是,我在搜索文件名之前打印了数据库,所以我确信所有者在这个数据库中确实有一个相关的文件名。也许只有一个,但仍然是一个。
这让我想到了一个问题:我的查询出了什么问题?
【问题讨论】:
-
我可以确定 我的查询有什么问题? 是 SQL 注入的受害者
-
好吧,你应该只得到 OWNER 的随机 ID...在这里你得到一个随机 ID 并期望它也归
owner所有。