2

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

$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

更多解释:我想将所有结果放入集群中,以便我可以选择将它们放入匹配日期或优先级或参考的集群中,然后我想获得这些集群并按其他方式组织它们。例如,我想按优先级进行集群,然后按日期或参考对每个集群进行排序。

首先,我试图通过从数组中获取所有内容并聚类子数组来做到这一点,这很有效,但是随后每个子数组的排序不起作用,这似乎是一个更好更简单的解决方案。

4

1 回答 1

1

这就是 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的示例用法:

//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。

于 2013-03-20T14:09:37.437 回答