1

我的情况是,当有人向我的新闻网络数据发布 60 万条记录时,他们可以创建与某人在过去几个小时内以相同主题发布的相同标题。

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
4

3 回答 3

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'
于 2012-05-08T02:27:27.210 回答
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;
   }
}

只需比较结果数据。谢谢迈克尔

于 2012-05-08T02:27:42.817 回答
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."';"

一定要检查 $subject 以避免 SQL 注入(更好:使用准备好的语句/PDO)。

于 2012-05-08T02:50:26.383 回答