MYSQL和PHP循环并从联合表中获取一个项目


MYSQL and PHP loop and grab just one item from a joint table?

我目前正在构建一个自定义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