1

データを適切にフォーマットしようとすると問題が発生します。

まず、私のPHPコードは次のようになります(デモについてはJSFiddleを参照してください)。

$result_rules = $db->query("SELECT rules.source_id, rules.destination_id, dest.project AS dest_project, src.project AS src_project, src.pk_id AS src_id, excep.project AS excep_project, excep.feature AS excep_feature, excep.milestone AS excep_milestone
    FROM dbo.FFC_Rules rules
    INNER JOIN dbo.Destination dest
        ON dest.pk_id=rules.destination_id
    LEFT JOIN dbo.Source src
        ON src.pk_id=rules.source_id
    LEFT JOIN dbo.Exceptions excep
        ON src.pk_id=excep.source_id
    ORDER BY dest.project ASC");

$last_src = false;
$last_dest = false;
while($row = sqlsrv_fetch_array($result_rules)){  
    if ($row['dest_project'] !== $last_dest) {
        if ($last_dest !== false)
            echo "</div>";
        $last_dest = $row['dest_project'];
        echo "<div class='projectscontainer'>";
        echo    "<div id='arrow' class='arrow-right'></div>";
        echo    "<span class='item destproject unselectable' title='ID: $row[destination_id]'>$row[dest_project]</span>";
        echo    "<br>";
    }

    echo        "<div class='srcprojects'>";
    if (is_null($row['src_id'])) {
        echo        " Source ID for Destination ID $row[destination_id] is NULL";
    } else {
        if($row['src_project'] !== $last_src) {
            $last_src = $row['src_project'];
            echo    "<span class='item srcproject' title='ID: $row[src_id]'>$row[src_project]</span>";
            if (!is_null($row['excep_feature']))
                echo"<div id='arrow' class='arrow-right'></div><span class='item srcproject exception' title='Feature'>$row[excep_feature]</span>";
            if (!is_null($row['excep_milestone']))
                echo"<div id='arrow' class='arrow-right'></div><span class='item srcproject exception' title='Milestone'>$row[excep_milestone]</span>";
            echo    "<br>";
        }
    }
    echo        "</div>";//end srcprojects
}
echo        "</div>";//end projectscontainer

クエリでは、Destinationプロジェクトで並べ替え、PHPコードでは、現在の宛先が最後の宛先と同じかどうかを確認します。もしそうなら、私は名前を表示しません。Sourceプロジェクトについても同じことをしたいのですが、クエリはDestinationプロジェクトによって順序付けられているため、繰り返しはさまざまな場所で発生し、PHPコードによってキャッチされません。

クエリによって返された40,000以上の行をすべて取得しなくても、これを実現するにはどうすればよいですか?

4

1 に答える 1

0

次のように、一方を他方の中でソートする必要があります。

dest.project ASC、src.projectASCによる注文

また、LIMIT句を使用して、クエリから必要な行数を指定します。

于 2013-03-19T21:26:23.697 に答える