MySQL的选择限制分页

问题描述:

我有选择的结果从我的表:MySQL的选择限制分页

id tag 
1 hey 
1 wow 
2 cry 
87 game 
87 bmw 
6 lady 
7 wow 

但是这个结果我JOIN得到。 我的完整的SQL查询:

SELECT sites.id, sites.host, sites.url, sites.password, sites.status, sites.pr, sites.tyc, sites.alexa, sites.lastcheck, sites.comment, tags.tagname, tags.tagid FROM sites 
LEFT JOIN sites_tags ON sites_tags.shellid = sites.id 
LEFT JOIN tags ON sites_tags.tagid = tags.tagid 

对于分页我需要查询3个实际DATAS。

如果我的查询 - LIMIT 3,我想

1 hey 
1 wow 
2 cry 
87 game 
87 bmw 

但不

1 hey 
1 wow 
2 cry 

例如我需要所有由ID限制的结果,而不是按行。

对不起,英语不好。

+2

您提供的查询不会产生您显示的示例数据集。难以理解你想要达到的目标。 – Romain 2012-04-17 11:59:41

+0

不知道它是否是最好的解决方案,但我用于使用多个连接查询视图。没有限制的问题,而且当我需要直接在数据库中检查某些内容时,我可以轻松地在特殊的情况下使用它 – 2012-04-17 12:01:25

SELECT 
    s.id, 
    s.host, 
    s.url, 
    s.password, 
    s.status, 
    s.pr, 
    s.tyc, 
    s.alexa, 
    s.lastcheck, 
    s.comment, 
    tags.tagname, 
    tags.tagid 
FROM (
    SELECT 
     id, 
     host, 
     url, 
     password, 
     status, 
     pr, 
     tyc, 
     alexa, 
     lastcheck, 
     comment 
    FROM sites 
    LIMIT 3 
) s 
LEFT JOIN sites_tags ON sites_tags.shellid = s.id 
LEFT JOIN tags ON sites_tags.tagid = tags.tagid 

这是假设你是想为标签,涉及到精确的3个站点。这将选择3个站点的站点信息,然后还将选择任何标签(如果有)。

但是它不会正是你想要什么回报,你会得到更好的压制做一个查询,以便从sites

SELECT 
    id, 
    host, 
    url, 
    password, 
    status, 
    pr, 
    tyc, 
    alexa, 
    lastcheck, 
    comment 
FROM sites 
LIMIT 3 

再进行第二次选择所有字段执行以下操作以获取标签这些网站。

SELECT 
    sites_tags.shellid AS id, 
    tags.tagname, 
    tags.tagid 
FROM sites_tags 
INNER JOIN tags ON sites_tags.tagid = tags.tagid 
WHERE sites_tags.shellid IN (..... your ids go here ......) 

(猜测idsites.id

替换FROM sites有:

FROM (SELECT * 
     FROM sites 
     ORDER BY whatever 
     LIMIT 3 
    ) AS sites