基于 Mysql 中模式的复杂结果集


Complex result sets based on a pattern in Mysql

我有一个表,其中包含附加到所有者 ID 的记录。

当我检索结果集时,它可能有多个属于同一所有者的行。

我想以公平的方式向所有者订购我的结果,为每个所有者显示 1 条记录,然后在他们的下一条记录中重复该过程。

我尝试按 FIELD('owner',{list,of,owners}) 使用顺序,但这仍然将所有记录组合在一起,在所有记录之前显示所有所有者结果。

例:

Record | Owner | value
1      | A     | xyz
2      | A     | xyz
3      | B     | xyz
4      | C     | xyz
5      | C     | xyz
6      | B     | xyz

我希望这个结果集的顺序是

Record | Owner
1      | A
3      | B
4      | C
2      | A
6      | B
5      | C

我正在使用Zend_Db_Table进行查询,无法更改。因此,请基于PHP/Mysqli的代码。

顺序会发生变化,但始终处于模式中。我可以随时访问完整的模式,告诉我所有者ID的顺序。

我可以在不诉诸 PHP 中重新调整结果集的情况下实现这一点吗?

这样的东西会起作用。

  1. 创建名为 rank 的新列,为每一行分配一个排名。此列的值将是按所有者分组的排名。
  2. 从步骤 1 的输出表中选择所需的列,并按排名排序。

演示

SELECT report,owner FROM (
        SELECT report,owner,value, IF(@prev <> owner, @cnt := 1, @cnt := @cnt + 1) AS rank, @prev := owner
        FROM x, (SELECT @prev := null, @cnt := 0) vars  
        ORDER BY owner
    ) as y ORDER BY y.rank,y.owner;

注意:将x替换为表名