php - 用MySQL和PHP制作标签云

标签 php sql mysql tags

我正在制作标签云。我有一个名为 tags 的表,其中包含一行“id”和一行“tag”。

每一行“标签”都是一个标签,就像在这个网站上一样——想象一下这个例子中一个名为“foo”的标签。

在本例中,每一行“id”都是被标记为“foo”的网页的 id。

所以任意行可能看起来像:

foo | 3 6 16 39 43 58 38 12 55

我如何制作一个函数来检查整个表是否存在 $tag,如果它存在 - 添加一个空格和 $id 到该标签的“id”行。如果标签不存在于我的表中,则添加标签,并添加 id。

我的代码(半PHP,半伪)如下:

if($tag doesnt exist in table)
{
     mysql_query("INSERT INTO tags (tag, id) VALUES ('$tag', '$id'");
}
if($tag exists in table)
{
     mysql_query("...append somehow... $id . " " WHERE tag = '$tag'");
}

我只是不知道要在条件中放入什么或如何按照我的需要在 SQL 中附加。我该怎么做?

最佳答案

有更好的方法来实现这个功能。通常要实现标签系统,您将有两个表,tags 和 item_tags(或在您的系统中有意义的其他名称)。tags 表将包含标签 id 和标签名称,item_tags 表将包含标签 id和 item_it(无论您标记的是什么项目的 ID)。每个项目的每个标签将有 1 行。因此,如果一个项目有 3 个标签,则 item_tags 表中将有 3 行。这将简化您的应用程序并可能减少数据库服务器上的负载。

但是,如果您需要按照当前的方式执行此操作,则需要在每次请求时首先为当前项目选择标签。如果结果集中没有任何行,则创建一个新行。否则,您从返回的行中获取值,连接新标签 ID,然后进行更新。此方法将导致每个请求至少调用两次数据库,而不是像我上面提出的解决方案那样调用一次。

第一个

关于php - 用MySQL和PHP制作标签云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5010808/

相关文章:

php - 如何使用带有 DKIM 签名的 Phpmailer 发送电子邮件?

PHP:通过引用传递给函数的数组?

sql - 在 R 函数中调用 SQL 函数

mysql - 使用 UNION ALL 选择以将表名显示为附加列

php - 根据域更改数据库连接

php - Windows 10 WSL ZipArchive::extractTo(): 权限被拒绝 Laravel

php - zend Framework 2 从插件查询

sql - 将一个表多次连接到其他表

sql - 计算多多边形地理并集的高效技术

mysql - 优化应用程序的 MySql Select