MySQL选择分页限制

时间:2012-04-17 11:56:04

标签: mysql select join pagination unique

我从我的表中选择了结果:

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个实际数据。

如果我的查询 - 限制3,我想要

1   hey
1   wow
2   cry
87   game
87   bmw

但不是

 1   hey
 1   wow
 2   cry

E.g。我需要所有结果受ID限制,而不是行。

抱歉英文不好。

2 个答案:

答案 0 :(得分:2)

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 ......)

答案 1 :(得分:1)

(猜测id是指sites.id

FROM sites替换为:

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