我从我的表中选择了结果:
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限制,而不是行。
抱歉英文不好。
答案 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