我目前正在构建一个自定义CMS来帮助我学习PHP和MYSQL。我有两个数据库表"用户"和"文章"。当用户提交文章时,"文章"表中的"author_id"字段将用户"users_id"从"用户"表中放置。这样,我可以连接表并从该用户那里获取所有文章。现在我正在尝试在主页上制作一个功能部分。我想遍历所有作者/用户并从该用户那里获得一篇文章。这是我的代码示例...
$author= db::getInstance()->query("SELECT * FROM users, articles WHERE user_id = author_id");
foreach($author->results() as $author) {
echo $author->profile_img;
echo $author->user_name
echo $author->article_title;
}
如果用户只发布了一篇文章,这工作正常,但如果有超过 1 篇,那么它将遍历该用户的所有帖子。我只想回应每个用户的 1 篇文章,但不确定如何实现这一目标。谁能指出我正确的方向?
非常感谢,
路易斯·隆巴迪
如果你想为每个用户写一篇任意文章,你可以使用MySQL(错误)功能,允许你做"部分"聚合:
SELECT u.*, a.*
FROM users u JOIN
articles a
ON u.user_id = a.author_id
GROUP BY u.user_id;
对于随机文章,我的首选方法更像是这样的:
select u.*, a.*
from (select u.*,
(select a.article_id
from articles a
where a.author_id = u.user_id
order by rand()
limit 1
) as article_id
from users u
) u join
articles a
on u.article_id = a.article_id;
最后,我获取第一个/最后一个的首选方法如下所示:
SELECT u.*, a.*
FROM users u JOIN
articles a
ON u.user_id = a.author_id
WHERE a.article_id = (SELECT MAX(a2.article_id)
FROM articles a2
WHERE a2.author_id = u.author_id
);
您可以使用
MySql limit
:
SELECT * FROM users, articles WHERE user_id = '$author_id' limit 0,1
完整文档:https://dev.mysql.com/doc/refman/5.5/en/limit-optimization.html