【问题标题】:Two articles with same title reading from database从数据库中读取的两篇同名文章
【发布时间】:2013-07-17 20:46:52
【问题描述】:

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

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。

【问题讨论】:

  • ...then the query will return 2 articles, while I only want to show one article-data on that page 当您希望链接返回一项且仅一项时,非唯一值不是链接的好选择。
  • 您是否允许匿名访问您的网站,或者用户是否始终登录,并且文章应始终为已登录用户提供?
  • 如果链接完全相同,数据库应该如何知道用户请求的是哪篇文章?魔法?必须有一些差异化。

标签: c# asp.net database


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果有人访问 /article/cars,您只需向他们展示所有标题为“汽车”的文章列表,然后让他们选择他们想要的。

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

    【讨论】:

      【解决方案3】:

      你们知道有什么方法可以解决这个问题吗?

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

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

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

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

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

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

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

      【讨论】:

        【解决方案4】:

        您可以制作一个页面来消除结果的歧义。如果您键入 www.url.com/article/car 之类的网址,请在数据库中搜索标题为“汽车”的文章,并以唯一的网址显示两个结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-20
          • 2013-04-28
          • 1970-01-01
          相关资源
          最近更新 更多