我需要将各种MySQL表组合起来以获得通用结果。所需和预期的结果是网站上最后X条评论的列表,但这些表格是个人,例如:news_comments,pages_comments等。单独地,这些表格具有JOINS到用户数据库。
此评论表中的3个结构为:
news_comments, pages_comments, other_comments
id int ai
id_new/id_page/id_other int
id_user int
comment text
created int (timestamp)
用户表:
id int ai
login int
password varchar
...
我最后没有完成,因为我们只需要id和登录。
此查询(个人)的正常使用是:
SELECT users.id, users.login, news_comments.*, news_comments.id AS id_comment
FROM users, news_comments
WHERE users.id=news_comments.id_user AND news_comments.id_new=$id
ORDER BY created DESC
LIMIT $offset,$rows
工作正常!
但是在后端我希望列出网站上的所有评论来调节和控制它。我需要组合所有注释表,按创建的desc命令并限制结果以进行分页。
我使用MySQL和PHP,所以如果我需要使用PHP,那就没问题了。
我怎么做?
提前致谢!
答案 0 :(得分:2)
SELECT *
FROM (
SELECT *
FROM (
SELECT *
FROM news_comments
WHERE id_new = $id
ORDER BY
created DESC
LIMIT $rows
) q
UNION ALL
SELECT *
FROM (
SELECT *
FROM pages_comments
WHERE id_new = $id
ORDER BY
created DESC
LIMIT $rows
) q
UNION ALL
SELECT *
FROM (
SELECT *
FROM other_comments
WHERE id_new = $id
ORDER BY
created DESC
LIMIT $rows
) q
) q
JOIN users u
ON u.id = q.id_user
ORDER BY
created DESC
LIMIT $offset, $rows
请注意,限制也应用于每个内部查询,以便它们可以从索引中受益。
创建以下索引:
CREATE INDEX ix_newscomments_new_created ON news_comments (id_new, created)
CREATE INDEX ix_pagescomments_new_created ON pages_comments (id_new, created)
CREATE INDEX ix_othercomments_new_created ON other_comments (id_new, created)
让它快速工作