gpt4 book ai didi

php - MYSQL:友好的 URLs sql 查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:32:43 26 4
gpt4 key购买 nike

我想进行查询,使用它我可以检查我为新视频条目制作的 URL 是否存在于我的数据库中。

我当前的查询是:

SELECT Count(videoid) FROM video WHERE titleurl = 'test';

我将计数存储在变量 $n 中,然后使用以下 PHP 代码检查它

if ($n > 0){
return $output . "-$n";
}else{
return $output;
}

但是上面的查询造成了一个问题。假设

  • 第一个用户提交了名为 Test 的视频,因此 url 将为 http://example.com/video/test/
  • 第二个用户提交了一个名称为 Test 的视频,因此 url 将为 http://example.com/video/test-1/ 因为一个条目的 titleurl test 已经存在,所以我在其中添加了 1,这将是 test-1
  • 第三个用户也添加了一个名为 test 的视频条目,但这次根据我的方法 url 将是 test-1,这是错误的。

我想解决这个问题,如果 test 已经存在,那么它应该是 test-1 并且如果另一个用户创建了一个名为 test 的条目,那么 url 应该是test-2 因为 test 和 test-1 已经存在。

请给出一些我可以解决这个问题的方法。

最佳答案

友好的 url 很好,但您也应该始终添加对象 ID,或在数据库中存储一个唯一的字符串。例如,在 stackoverflow 上查看此处的 url。

编辑我严重怀疑谷歌可以接受短数字但不喜欢长数字。这是一个仅在必须的地方使用数字的解决方案:添加另一列保存每个测试视频的“id”值,并在该列和 titleurl 上创建一个唯一索引:

ALTER TABLE video ADD COLUMN titleurl_id UNSIGNED TINYINT NOT NULL;
CREATE UNIQUE INDEX uidx_url ON video (titleurl, titleurl_id);

创建视频时,您需要添加该值:

$amount = query("SELECT COUNT(*) FROM video WHERE titleurl='test'");
query("INSERT INTO video(titleurl, titleurl_id) VALUES ('test', $amount + 1)");

您需要注意插入查询的结果,如果这样做,您可能会遇到竞争条件(这就是 id 在 url 中更方便的原因)。创建网址:

$urlpart = query("
SELECT IF(
titleurl_id = 0,
titleurl,
CONCAT_WS('-', titleurl, titleurl_id)
) AS url FROM video");

关于php - MYSQL:友好的 URLs sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com