Php GROUPBY和ORDERBY每个组只生成一个结果?

Php GROUPBY和ORDERBY每个组只生成一个结果?,php,mysql,group-by,Php,Mysql,Group By,我试着在分组和排序中得到我的结果,但似乎每组只能得到一个结果,这是为什么?我怎样才能得到整个组和那些订购的 $group = "TODO_PRIO"; $get_groups = mysql_query("SELECT * FROM TODOS WHERE TODO_USER LIKE '%,$currentuser,%' GROUP BY $group"); while($arrayz = mysql_fetch_array($get_groups)){ echo $arrayz['TOD

我试着在分组和排序中得到我的结果,但似乎每组只能得到一个结果,这是为什么?我怎样才能得到整个组和那些订购的

$group = "TODO_PRIO";
$get_groups = mysql_query("SELECT * FROM TODOS WHERE TODO_USER LIKE '%,$currentuser,%' 
GROUP BY $group");

while($arrayz = mysql_fetch_array($get_groups)){
echo $arrayz['TODO_PRIO']."</br>";
}
再解释一下: 我想把我所有的结果放到集群中,这样我就可以选择把它们放到与日期、优先级或引用相匹配的集群中,然后我想得到这些集群并用其他东西来组织它们。例如,我想按优先级进行集群,然后按日期或引用对每个集群进行排序


首先,我试图通过从一个数组和集群子数组中获取所有数据来实现这一点,这是可行的,但随后每个子数组的排序都不起作用,这似乎是一个更好更简单的解决方案。

GROUP by就是这么做的。它将多行分组为一行。 . 你需要订购它

SELECT * FROM TODOS WHERE TODO_USER LIKE '%,$currentuser,%' ORDER BY $group ASC
然后你会得到

1
1
1
2
2
3
4
4
[...]
或者您可以在PHP中顺利地将其分组

$tmp = array();
while($arrayz = mysql_fetch_array($get_groups)){
    $tmp[$arrayz['TODO_PRIO']][] = $arrayz; //extra [] pushes it in a new subarray
}
这将产生一个易于使用的阵列:

array(
    1 => array(ToDo1,ToDo4,ToDo2),
    2 => array(ToDo5,ToDo3,ToDo6),
    [...]
)
示例用法:

//记录各种待办事项的优先顺序
foreach($tmp作为$ToDo\U Prio=>$ToDo\U列表)
{
回声“优先权$ToDo_Prio:
    ”; //对各种待办事项进行审查 foreach($ToDo_列表作为$ToDo_项目) { echo“
  • ”$ToDo_Item[]。“
  • ”;//替换为要显示的Coumnname。 } 回声“
”; }

请记住,$ToDo_项是一个数组,它包含表中的一行。因此,您需要指定一个列名。

请将此表中的示例数据
TODOS
与所需的输出一起发布。按组分组按分组列显示结果。这是预期的行为。。你们想达到什么目标?你们希望团队做什么?如果你想让所有的1都出现在一起,那么所有的2都出现在一起,只要使用ORDER BY,如果你需要计算一组项目的平均值、总和等信息,那么使用group BY你所说的“群集”是什么意思?如果您的意思是希望它们以特定的顺序出现,请使用
orderby
groupby
的全部要点是,它每个组只生成一行。“首先,我试图通过从一个数组和集群子数组中获取所有数据来实现这一点,这是可行的,但随后对每个子数组的排序不起作用,这似乎是一个更好更简单的解决方案。”基于此,我认为学习如何编写SQL来实现这一点比编写PHP来实现这一点要好得多。
array(
    1 => array(ToDo1,ToDo4,ToDo2),
    2 => array(ToDo5,ToDo3,ToDo6),
    [...]
)
//itterate over the various ToDo-prioritys
foreach($tmp as $ToDo_Prio => $ToDo_List)
{
    echo "Priority $ToDo_Prio:<br/><ul>";
    //itterate over the various ToDo-elements
    foreach($ToDo_List as $ToDo_Item)
    {
        echo "<li>".$ToDo_Item[<desired column>]."</li>"; //replace <desired column> with your Coumnname you want to display.
    }
    echo "</ul>";
}