我正试图在我网站上的文章上实施标签系统。我的数据库中的每个文章行都有一个tags
列,可以包含php html css jquery
之类的字符串。
查询数据库时,我想一次只返回10个结果。这就是我现在正在使用的内容:
$sql = "SELECT * FROM articles WHERE tags LIKE '%" . $tag . "%' LIMIT " . $start . ", 10";
我突然觉得这不准确。限制结果时,他将获取行$start
后的10条记录,然后找到包含$tag
的记录。
我需要他做的是首先找到标签中包含$tag
的所有行,然后限制结果。
使用两个查询执行此操作似乎非常简单,但这是执行此操作的最佳方式吗?
从偏移$tag
开始,抓取包含$start
的10行的最佳方法是什么?
答案 0 :(得分:0)
一种选择是使用子查询,以便从已经过滤的结果中选择限制:
$sql = "SELECT * FROM ( SELECT * FROM articles WHERE tags LIKE '%" . $tag . "%' ) LIMIT " . $start . ", 10";
答案 1 :(得分:0)
我曾经在一家大型在线新闻门户网站提供商工作,我们通过一个包含item_id和type_id的标签和标签表(包含AI ID)来做这类事情(文章为1,图像为2等)。然后,我们从该表中获取ID(这是超快的)并且可以解决您遇到的问题。
Like this (tags): (id is only for updates and deletes, and order of addition if needed and not modified by an update)
id | tag | item_id | item_type
1 | 1 | 1 | a
2 | 1 | 2 | a
3 | 1 | 2 | i
Then the tag table:
id | value
1 | php
2 | js
3 | mysql
等等。然后,我们有一个清晰的所有标签列表供查看,以及一个非常简单的方法来获取每个标签下的项目数。如果您希望能够在侧栏中列出所有标签以及每个标签中的项目数量,那么可能值得考虑。