GROUPBY和ORDERBY每组只产生1个结果?

时间:2013-03-19 11:10:32

标签: 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['TODO_PRIO']."</br>";
}

以上代码输出以下内容,仅显示每个组中的一个。

1
2
3
4
5

更多解释: 我希望将我的所有结果都集中到集群中,这样我就可以选择将它们放入集群中,它们匹配日期或优先级或引用,然后我想获取这些集群并通过其他方式组织它们。例如,我希望按优先级进行聚类,然后按日期或引用对每个聚类进行排序。

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

1 个答案:

答案 0 :(得分:1)

这就是GROUP BY的作用。它将多行分组到一行。 Read it here。 你需要订购它

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的示例:

//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>";
}

请记住,$ ToDo_Item是一个包含表中一行的数组。所以你需要指定一个Columnname。