从数据库中读取两篇标题相同的文章

本文关键字:标题 两篇 文章 数据库 读取 | 更新日期: 2023-09-27 18:23:53

用户可以在我的网站上添加文章,当有人点击文章时,他们会得到这样的链接:

www.example.com/article/cars

"汽车"是这篇文章的标题。

然后我从数据库中读取文章的内容,并查询:

SELECT * FROM Article WHERE Title = 'Cars'

但另一位用户也可以添加一篇标题为"汽车"的文章。然后就出了问题。。。因为第二篇关于"汽车"的文章也会得到链接:www.example.com/article/cars,然后查询会返回2篇文章,而我只想在该页面上显示一篇文章的数据。

所以我需要用这样的方法来解决这个问题:

SELECT * FROM Article WHERE Title = 'Cars' AND Id = '1';

另一个:

SELECT * FROM Article WHERE Title = 'Cars' AND Id = '2';

但我不想有这样的链接,阅读一篇有标题和ID的文章(我想把它隐藏起来,而不是在URL中):

www.example.com/article/cars/1
www.example.com/article/cars/2

你们知道怎么解决这个问题的方法吗?用户可以添加同名文章,但当有人点击链接时,从数据库中读取的内容必须是正确的文章,而不在URL中显示文章id。

从数据库中读取两篇标题相同的文章

您有user_article表吗?您可以只允许每个用户使用唯一的文章名称

SELECT * FROM Article WHERE Title = 'Cars' AND UserId = '123456789';

我想当他们点击链接

时,你就会知道这是谁的文章了

如果有人去/article/cars,你只需要向他们显示一个标题为"cars"的所有文章的列表,并让他们选择他们想要的。

通过向表的"标题"字段添加unique CONSTRAINT或NON-CLUSTRED INDEX,您可以始终强制用户创建具有唯一名称的项目。

你们知道怎么解决这个问题的方法吗?

是的,我想到了一对。首先,在URL中包含ID。我知道,你已经说过你不想要这样的东西,但考虑一下这样的URL:

www.example.com/article/cars-1
www.example.com/article/cars-2

你可以这样做。但您必须对路由进行一些真正的花式工作。

想到的第二个可能就是答案,将永久链接存储在数据库中。这将允许您在创建文章时创建永久链接-因此,在某种计数器上添加一个新的想法,让用户知道他们需要指定一个自定义永久链接,因为它已经在使用了。

现在,您不再提取文章的标题来构建URL,而是提取实际的永久链接。

注意:我认为值得注意的事情。Stack Overflow实际上在URL中包含ID,原因是确切地。可读的URL是为谷歌构建的。例如,这篇文章的链接我的答案是:

http://stackoverflow.com/questions/17731295/two-articles-with-same-title-reading-from-database/17731397#17731397

您可以创建一个页面来消除结果的歧义。若您键入一个类似www.url.com/article/car的url,请在数据库中搜索标题为"car"的文章,并用唯一的url显示两个结果。