首页 文章

在单个sql查询中选择多个表

提问于
浏览
0

关于这一点的其他线索似乎没有帮助我 . 我想从一个表中选择所有信息,但是按照另一个表中的值对它们进行排序 .

SELECT消息,
date
IP,
名称,
网站,
ID
guestbook_message
WHERE删除= 0
和日期> DATE_SUB(NOW(),INTERVAL 1天)
ORDER BY date DESC“;

除了我需要 ORDER BY 'votes' DESC; ,这是在另一个名为 m_votes 的表中 .

是否有可能做到这一点?我在另一个网站上看到这个查询是不可能的 .

$ query =“SELECT g.message,g.date,g.ip,g.name,g.website,g.id FROM guestbook_message AS g JOIN m_votes AS v ON g.id = v.vid WHERE g.deleted = 0 AND v.messageid = $ mid AND g.date> DATE_SUB(NOW(),INTERVAL 1 DAY)ORDER BY(v.votes)DESC;“

^^这不起作用

4 回答

  • 1

    您需要加入:

    SELECT
         g.message,
         g.date,
         g.ip,
         g.name,
         g.website,
         g.id 
    FROM guestbook_message AS g
    LEFT JOIN m_votes AS v
    ON g.id = v.message_id
    WHERE g.deleted = 0 
    AND g.date > NOW() - INTERVAL 1 DAY
    GROUP BY g.id
    ORDER BY COUNT(v.message_id) DESC
    
  • 5

    我是一个初学者,对我而言,这是一个非常难的查询,因为它需要在m_votes中找到'投票'的SUM并按此顺序排序 . 以及从其他查询中获取信息 . 这是获取有关消息的信息的查询:

    "SELECT message,  
             `date`,  
             ip,  
             name,  
             website,  
             id   
      FROM `guestbook_message`   
      WHERE deleted = 0   
         AND date > DATE_SUB(NOW(), INTERVAL 1 DAY)   
      ORDER BY `date` DESC";
    

    这是获取有关投票信息的查询:

    "SELECT SUM(votes) as votes FROM m_votes WHERE messageid = $mid"
    

    但我不知道我会将它们放入一个查询中,该查询将从第一个查询中收集所有信息,然后通过投票对它们进行排序 .

  • 1

    您必须加入数据,也就是说,您需要为每个留言板留言投票 .

    让我们假设为了简单起见,您有以下表格:

    Message
    ----
    id INT
    messsageText VARCHAR(5000)
    

    MessageVotes
    ------------
    messageId INT (references the `id` column in table Message)
    voteValue INT (suppose it can be +1 or -1, whatever)
    votingIp  VARCHAR(100)
    

    然后你可以做类似的事情

    SELECT
      m.id,
      m.messageText,
      SUM(mv.voteValue) AS votes
    FROM
      Message AS m,
      MessageVotes AS mv
    WHERE
      mv.messageId = m.id
    GROUP BY
      m.id, m.messageText /* here you need to place every field you `select` from Message */
    ORDER BY
      SUM(mv.voteValue) DESC
    

    甚至更好:

    SELECT
      m.id,
      m.messageText,
      SUM(mv.voteValue) AS votes
    FROM
      Message AS m
      LEFT JOIN MessageVotes AS mv ON mv.messageId = m.id
    GROUP BY
      m.id, m.messageText
    ORDER BY
      SUM(mv.voteValue) DESC
    

    看到:

  • 0

    请尝试下面的查询,你错过了group by子句 .

    SELECT g.message, 
            g.date, 
            g.ip, 
            g.name, 
            g.website, 
            g.id 
        FROM guestbook_message AS g 
        JOIN m_votes AS v ON g.id = v.vid 
        WHERE g.deleted = 0 
            AND v.messageid = $mid 
            AND g.date > DATE_SUB(NOW(), INTERVAL 1 DAY) 
        GROUP BY g.message, 
            g.date, 
            g.ip, 
            g.name, 
            g.website, 
            g.id
        ORDER BY SUM(v.votes) DESC;
    

相关问题