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

时间:2013-07-18 18:31:12

标签: c# asp.net database

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

www.example.com/article/cars

“汽车”是该文章的标题。

然后我用数据从数据库中读取文章的内容:

SELECT * FROM Article WHERE Title = 'Cars'

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

所以我需要通过以下方式解决这个问题:

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。

4 个答案:

答案 0 :(得分:0)

你有user_article表吗?您只能为每个用户提供唯一的文章名称

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

我假设当他们点击链接时你会知道他们的文章是什么

答案 1 :(得分:0)

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

您可以通过向表的标题字段添加UNIQUE CONSTRAINT或NON-CLUSTERED INDEX来强制用户创建具有唯一名称的文章。

答案 2 :(得分:0)

  

你们知道如何解决这个问题吗?

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

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

你可以使用它。但你必须做一些真正的花哨与路由工作。

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

现在,您不必拉出文章的标题来构建网址,而是拉出实际的固定链接。

注意:我认为值得注意的事情。 Stack Overflow实际上包含了完全原因的网址中的ID。可读的URL是为Google构建的。例如,此帖子的链接是:

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

答案 3 :(得分:0)

您可以创建一个页面来消除结果的歧义。如果您输入www.url.com/article/car这样的网址,请在数据库中搜索包含“car”标题的文章,并使用唯一的网址显示这两个结果。