【问题标题】:How to get information from two database tables at once? (MySQL)如何一次从两个数据库表中获取信息? (MySQL)
【发布时间】:2011-09-17 23:37:20
【问题描述】:

我想在我的一个网站页面上显示评分最高的文章,但出现了问题。

我在一个名为stories的表格中拥有所有文章文本、作者、日期、时间等, 我在另一个名为 votes 的表格中有投票结果。

问题是,当我从数据库中获取文章信息时,我需要通过与之对应的投票对其进行排序(在投票表中,我有投票值和它对应的文章的 ID)。

那么我如何才能显示 stories 表中的文章,但通过与文章对应的 votes 表中的投票值对其进行排序?

这个伪代码可能是:

SELECT * FROM stories ORDER BY //Votes from votes table where article_id corresponds to this article

【问题讨论】:

  • 您应该基本了解 SQL 的工作原理以及关系代数是什么才能成功使用 SQL 数据库。尝试在空闲时间阅读一些书籍。

标签: php mysql sql select


【解决方案1】:

我们看不到您的表结构,但假设您的关系是stories.article_id = votes.article_id,这是一个非常简单的JOINORDER BY。您应该查看基本的 SQL JOIN 语法,因为这是一个 SQL 101 问题。如果votes 中的文章标识符列与votes.article_id 不同,请在下面替换。

SELECT
  stories.*,
  votes.votes
FROM stories JOIN votes ON stories.article_id = votes.article_id
ORDER BY votes.votes DESC

【讨论】:

    【解决方案2】:

    假设您有一个对应于 story_id 的字段,例如 vote_story_id,请使用:

    SELECT stories.*, vote.vote_number FROM stories, votes WHERE vote_story_id = story_id ORDER BY vote.vote_number DESC
    

    【讨论】:

      【解决方案3】:

      这对你有帮助吗?

      SELECT stories.* FROM stories JOIN votes on votes.article_id = stories.id WHERE ...
      

      【讨论】:

        【解决方案4】:

        您可能为每次投票存储一行,以便跟踪哪个用户进行了投票。在这种情况下,您可以这样做:

        select s.*, vc.Count
        from Stories s
        left outer join (
            select StoryID, count(*) as Count
            from Votes
            group by StoryID
        ) vc on s.StoryID = vc.StoryID
        order by vc.Count desc
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-19
          • 2012-10-31
          • 1970-01-01
          • 2019-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多