2

グループごとに結果を取得しようとしていますが、グループごとに 1 つの結果しか取得できないようです。なぜですか? グループ全体と注文したグループを取得するにはどうすればよいですか?

$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 つだけを表示しています。

1
2
3
4
5

もう少し説明: すべての結果をクラスターに取得したいので、日付、優先度、または参照に一致するクラスターに結果を取得することを選択できます。次に、それらのクラスターを取得し、他のもので整理したいと考えています。たとえば、優先順位でクラスター化し、各クラスターを日付または参照で並べ替えたいとします。

最初に、配列からすべてを取得してサブ配列をクラスタリングすることでこれを実行しようとしましたが、これは機能しましたが、各サブ配列の順序付けが機能せず、これはより単純な解決策のように思えました。

4

1 に答える 1

1

Thats what GROUP BY does. It Groups multiple rows to one row. Read it here. You need to ORDER it

SELECT * FROM TODOS WHERE TODO_USER LIKE '%,$currentuser,%' ORDER BY $group ASC

Then yo get something like

1
1
1
2
2
3
4
4
[...]

Or you can smoothly group it in PHP

$tmp = array();
while($arrayz = mysql_fetch_array($get_groups)){
    $tmp[$arrayz['TODO_PRIO']][] = $arrayz; //extra [] pushes it in a new subarray
}

This will result in an easy to use array:

array(
    1 => array(ToDo1,ToDo4,ToDo2),
    2 => array(ToDo5,ToDo3,ToDo6),
    [...]
)

Example usage with 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>";
}

Keep in mind, that $ToDo_Item is an array that contains a row from your Table. So you need to specify a Columnname.

于 2013-03-20T14:09:37.437 に答える