gpt4 book ai didi

php - 基于 Mysql 模式的复杂结果集

转载 作者:行者123 更新时间:2023-11-29 12:31:26 25 4
gpt4 key购买 nike

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

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

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

我尝试使用 order by 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 步的输出表中选择所需的列,并按排名排序。

DEMO

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 替换为表名称

关于php - 基于 Mysql 模式的复杂结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27437641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com