我的情况是,当有人发布我的新闻网络数据时,有600k记录, 他们可以创建一个与过去几个小时刚刚发布相同主题的人相同的标题。
data: sid|title|desc|timestamp|userid
通常我使用:
select sid from ".$prefix."_stories WHERE title = '".$subject."' limit 0,1
它搜索$subject
的所有数据,然后通知海报,如果它们具有相同的标题。
我需要一个搜索最近100条记录的查询。
我尝试了以下操作,但这不起作用:
select sid from ".$prefix."_stories WHERE title = '".$subject."' and sid > MAX(sid)-100 limit 0,1
答案 0 :(得分:2)
您可以使用返回最后100 sid
的子查询来执行此操作。注意,为简洁起见,我省略了PHP连接。
SELECT
last100.sid
FROM
(
SELECT
sid,
title
FROM $prefix._stories
ORDER BY sid DESC LIMIT 100
) last100
WHERE
last100.title = '$subject'
答案 1 :(得分:0)
假设你有一个主键,每个记录增加1(最新的记录在底部),只需这样做:
SELECT sid, title
FROM ".$prefix."_stories
ORDER BY sid DESC
LIMIT 100
这将选择最后100条记录
迈克尔在我的评论中提出的要点......编辑代码并进一步评论:
删除where子句,这将选择最后100条记录...运行循环以检查标题或摘要是否已存在:
while ($row = $result) {
if $subject = $row['title'] {
$duplicate = TRUE;
endwhile;
}
}
只需比较结果数据。谢谢迈克尔
答案 2 :(得分:0)
按sid排序(降序,所以最新条目优先)并将结果限制为100:
$sql = "select t.sid from (select sid, title from ".$prefix."_stories ORDER BY sid DESC LIMIT 0,100) t WHERE title = '".$subject."';"
确保chek $ subject以避免SQL注入(更好:使用预准备语句/ PDO)。