我目前正在使用以下代码:
SELECT at.article_id, art.datetime, Count(at.article_id) AS common_tagged_art
FROM article_tags AS at INNER JOIN articles AS art ON at.article_id = art.article_id
WHERE at.tag_id = 4 OR at.tag_id = 3 OR at.tag_id = 1
GROUP BY at.article_id
ORDER BY common_tagged_art DESC, art.datetime DESC
这几乎返回了我需要的确切结果集,如下所示:
+-----------+---------------------+-------------+
| article_id| datetime | common_tags |
+-----------+---------------------+-------------+
| 23 | 2012-09-25 15:37:25 | 3 |
+-----------+---------------------+-------------+
| 24 | 2012-09-25 15:37:24 | 3 |
+-----------+---------------------+-------------+
| 27 | 2012-09-25 15:37:23 | 3 |
+-----------+---------------------+-------------+
| 30 | 2012-09-25 15:37:22 | 3 |
+-----------+---------------------+-------------+
| 21 | 2012-09-25 15:37:21 | 3 |
+-----------+---------------------+-------------+
我需要调整我的查询,以便能够确定 article_id 24 位于我返回的结果的第二行,然后我需要它返回第二行以下的所有内容。
如果子查询中有 100 行,并且我确定 article_id 24 在第 49 行,我需要查询返回第 50-100 行。我不确定这在 MySQL 中是否可行,或者根据我的原始查询,它是否更适合在 PHP 中执行。
到目前为止,我所拥有的内容类似于以下内容,只是,在子查询之后我不知所措。
SELECT article_id, datetime, common_tags
FROM (
SELECT at.article_id, art.datetime, Count(at.article_id) AS common_tags
FROM article_tags AS at INNER JOIN articles AS art ON at.article_id = art.article_id
WHERE at.tag_id IN (4,3,1)
GROUP BY at.article_id
ORDER BY common_tags DESC, art.datetime DESC
) at1
//IDENTIFY which row article_id X is on in at1
//GET any row below row X in at1
如果不是因为所有列都没有静态顺序,这将不是问题。
任何意见,将不胜感激。
谢谢!