Php mysql按标题搜索最近100条记录
我的情况是,当有人在我的新闻网站上发布60万条记录的数据时, 他们可以创建一个相同的标题,有人刚刚在过去几个小时发布了相同的主题Php mysql按标题搜索最近100条记录,php,mysql,Php,Mysql,我的情况是,当有人在我的新闻网站上发布60万条记录的数据时, 他们可以创建一个相同的标题,有人刚刚在过去几个小时发布了相同的主题 data: sid|title|desc|timestamp|userid 我通常使用: select sid from ".$prefix."_stories WHERE title = '".$subject."' limit 0,1 它在所有数据中搜索$subject,然后注意海报是否有相同的标题。 我需要一个搜索最后100条记录的查询 我尝试了以下方法,但
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
您可以使用返回最后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(将最新记录放在底部),只需执行以下操作:
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;
}
}
只需比较结果数据。感谢Michael按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)。这将返回多达100个匹配的标题,而不是搜索最近添加的100条记录以查找
$subject
。。这仍然会收集所有记录中标题相同的所有sid,然后显示最后100条记录。。事实上,我只需要搜索最后100条记录。。无论如何谢谢你@BinhNguyen否,没有WHERE
,并且假设sid
是您的主键,这将收集输入数据库的最后100条记录。如果sid
不是您的主键,则在中选择并在sid前面输入您的主键,title
,将ORDER BY
从sid
更改为主键,它将收集数据库中最后(最新)100条记录。谢谢!我测试了这个查询,但它不工作,没有找到结果:)谢谢!我以前对这个查询进行过测试,但结果不准确。。例如:数据有120条记录:标题为“aaa”的记录sid=50,标题为“aaa”的记录sid=120,标题为“aaa”的记录sid=120,现在我测试使用您的查询进行搜索,它只显示id=50的记录,因此找不到id=120的最后一条记录!真糟糕。。有什么理想的吗?对不起,我没有纠正查询中的一些输入错误。。实际上它工作得很好good@BinhNguyen我想会的。欢迎来到堆栈溢出。请单击答案旁边的复选标记,将答案标记为已接受。这与我最初的答案相同。正如Michael在我的评论中指出的,这将收集多达100条包含标题和$subject
的记录,而不是搜索最后100条记录。