【问题标题】:Sql - Getting the row quantity and selecting a certain row id and get the following rowsSql - 获取行数并选择某个行ID并获取以下行
【发布时间】:2014-05-21 02:33:50
【问题描述】:

假设我有一张桌子chattable

  id           sender           touser         message
----------------------------------------------------
1            User1            User2           Hi
2            User2            User1           Hello
3            User3            User1           How r u
4            User1            User3           r u there?
5            User1            User2           Hey

我想做以下事情

1) 获取具有相同值的行数。

例如-我想从chattable 中选择以 User1 作为发送者和 User2 作为 touser 的行数。在本例中,为 2。

我知道为了选择这些行,我应该选择下一行代码 -

SELECT sender, touser FROM chattable WHERE sender=User1, touser=User2;

但是我怎样才能获得包含此信息的行数?

2) 我想了解的另一件事是如何从某一行获取行数据并形成具有相同值的后续行。

意思是,我想用下一个代码——获取row id的最大值——

SELECT sender, touser FROM chattable WHERE sender=User1, touser=User2, id=( SELECT max(id) FROM chattable );

为了获得最大 id 编号,我应该如何更改它 - 在我的示例中,它应该是 row id 5 ,而不是因为它是整个表中的最后一行,只是因为它是 User1 值为的最后一行sender 和 User2 作为 touser。

现在假设我的最大 id 值为 5。

现在假设表中有新行 -

  id           sender           touser         message
----------------------------------------------------
6            User3            User2           Hi There
7            User1            User2           Hi There
8            User1            User2           Hello to u 2
9            User3            User1           How r u

现在我想知道是否有具有相同条件的新行 - User1 作为发件人,User2 作为 touser。

假设我正在获取新的最大 id 值 - 现在是 8。

但我不仅想从第 8 行获取信息,还想从第 7 行获取信息。

那么应该是什么 sql 行才能获取大于第 5 行的所有行,但同时满足 User1 作为发送者和 User2 作为 touser 的条件。

希望我已经把我的问题说清楚了 - 感谢您提供任何帮助

【问题讨论】:

  • 您能否提供第二个问题所需的结果数据?
  • 我想从第 7 行和第 8 行获取所有数据 - 因为假设我已经有了第 1 行和第 5 行数据。我想获取所有数据 - id、发件人、用户和消息
  • 我想这样做的一种方法 - 如果让我得到最后一行的 id - 比如说 5 - 所以我通过 5 并告诉它给我 5 到 5 之间的结果最大值 - 但我不知道该怎么做
  • 你可以试试 select... from... where sender='User1' and touser='User2' and id > 5
  • 呃,为什么mysqlsql-server 都被列为标签?

标签: php mysql sql sql-server


【解决方案1】:

对于第一个问题,您可以计算行数:

SELECT COUNT(*) FROM chattable WHERE sender=User1, touser=User2;

关于第二点:

SELECT MAX(Id) AS HighestID FROM chattable WHERE sender=User1, touser=User2;

【讨论】:

    【解决方案2】:

    你会得到这样的总行数

    SELECT COUNT(*) FROM chattable WHERE sender="User1" AND touser="User2";
    

    还有一个问题

    SELECT id, sender, touser FROM chattable WHERE sender="User1" AND touser="User2" ORDER BY id DESC LIMIT 1;
    

    【讨论】:

      【解决方案3】:

      1)

      SELECT sender, touser, count(*) 
      FROM chattable 
      WHERE sender=User1, touser=User2;
      

      2)

      SELECT sender, touser, max(id) as latest_id 
      FROM chattable 
      WHERE sender=User1, touser=User2
      

      【讨论】:

      • 我正在尝试理解第二种解决方案 - max(id) - 我是否应该将其声明为等于 8,当我使用 max(id) 时是否知道找到它? latest_id 的含义是什么?我试图了解它如何知道获取 id 为 7 和 8 的行
      • 它会扫描所有发件人=User1 和 touser=User2 的 id 并选择最大值(最新)。我为找到的最大值添加了一个名称。这只是结果列名而已
      • 那么他怎么知道得到第 7 行和第 8 行 - 而不是得到第 1 和第 5 行。据我所知,它只会得到第 8 行而不是第 7 行。如何它知道选择第 8 行和第 7 行而不是第 1 行和第 5 行吗?
      • 您不需要GROUP BY 才能像那样使用MAX(id) 吗?
      【解决方案4】:

      1) 你可以使用 COUNT(*)

      例如

      SELECT count(*) FROM chattable WHERE sender=User1, touser=User2;
      

      2) 你可以这样做,使用限制:

      SELECT id, sender, touser, message FROM chattable WHERE sender=User1, touser=User2 ORDER BY id DESC LIMIT 1
      

      或者这样,使用 MAX() (应该更快)

      SELECT MAX(id), sender, touser, message FROM chattable WHERE sender=User1, touser=User2 
      

      【讨论】:

      • +1 表示已更正。我认为找到 MAX() 比排序更快
      • 我倾向于同意。 MAX() 是 ANSI 兼容的,应该可以在其他地方工作,LIMIT 是 MySQL 的,而 TOP 是 MSSQL 的。我会同时添加:)
      • 关于第二种解决方案 - 我不明白它如何知道如何获取第 7 行和第 8 行,以及它如何知道忽略第 1 行和第 5 行?
      • @4this MAX() 函数返回所选列的最大值,您在 where 子句中确定您只需要 sender 和 touser 之间的数据 - 然后它会选择最大值跨度>
      • 所以它只会从第 8 行获取数据?
      猜你喜欢
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2017-07-11
      相关资源
      最近更新 更多