SELECT行LIKE标签和LIMIT带偏移量

时间:2014-07-03 16:24:46

标签: php mysql

我正试图在我网站上的文章上实施标签系统。我的数据库中的每个文章行都有一个tags列,可以包含php html css jquery之类的字符串。

查询数据库时,我想一次只返回10个结果。这就是我现在正在使用的内容:

$sql = "SELECT * FROM articles WHERE tags LIKE '%" . $tag . "%' LIMIT " . $start . ", 10";

我突然觉得这不准确。限制结果时,他将获取行$start后的10条记录,然后找到包含$tag的记录。

我需要他做的是首先找到标签中包含$tag的所有行,然后限制结果。

使用两个查询执行此操作似乎非常简单,但这是执行此操作的最佳方式吗?

从偏移$tag开始,抓取包含$start的10行的最佳方法是什么?

2 个答案:

答案 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

等等。然后,我们有一个清晰的所有标签列表供查看,以及一个非常简单的方法来获取每个标签下的项目数。如果您希望能够在侧栏中列出所有标签以及每个标签中的项目数量,那么可能值得考虑。