現在、さまざまなコンピテンシーを含む分類されたMySQLテーブルを持つWebサイトを構築中です。ネストされたセットモデルが最適化されていることがわかりました。しかし、重大な問題があります。ネストされたセットモデルはソートを許可していないため、実際にはその可能性が必要です。 私は(ソートのいずれかの種類なしが)この機能がサポートとして、出力データは、配列(ID、名前、深さ)になりたい:PHP:ネストされたセットからデータをソート
function tree()
{
$query = 'SELECT node.id, node.name, (COUNT(parent.name) - 1) AS depth FROM test_competence AS node, test_competence AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft';
$result = mysql_query($query) or die(mysql_error());
while($data = mysql_fetch_assoc($result))
{
$returnarray[] = $data;
}
return $returnarray;
}
私は機能を開始したが、持ってきましたどのように続けるかわからない:
function tree_sorted()
{
//Get data
$query = 'SELECT node.id, node.name, node.parent, (COUNT(parent.name) - 1) AS depth FROM test_competence AS node, test_competence AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft';
$result = mysql_query($query) or die(mysql_error());
//Fetch gotten data
while($data = mysql_fetch_assoc($result))
{
$fetched[$data['depth']][$data['id']] = array($data['name'], $data['parent']);
}
//Sort fetched data
foreach($fetched as $i => $row)
{
asort($row);
$sorted[$i] = $row;
}
//Merge sorted data (???)
foreach($sorted as $i => $arr)
{
foreach($arr as $x => $row)
{
$returnarray[] = array('id' => key($row), 'name' => $row[0], 'depth' => $x);
}
}
ご協力いただければ幸いです。私はネストされたセットからデータをソートするためのさまざまな方法を探ってきましたが、良い結果はありません。
ありがとうございます。
EDIT:正しい方法だと感じているuasort()関数でいくつか試しましたが、まだ問題は残ります。
ちょっとしたことですが、暗黙的なものではなく、明示的なJOINをSQLにお勧めします。 – staticsan