0

以下のコードでは、$rows は、データベース内の TestPhase テーブルからの MySQL クエリの結果としての配列値です。

<?php>
    $rows = array();

$result1 = mysql_query("SELECT * FROM TestPhase where Pid<10", $db) or die("cannot select");
while($row = mysql_fetch_array($result1)) {
  $rows []= array(
    'id' => $row['id'],
    'parent' => $row['parent'],
    'name' => $row['name'],
  );

}
?>

<script type="text/javascript">

var treeData = <?php echo json_encode($rows); ?>;

</script>

このコードは、クエリの結果と var treeData (つまり、$rows 配列) に格納されている値を使用してツリー ダイアグラムを作成するために使用される js ファイルのスニペットです。

function toTree(treeData) {
   var childrenById = {}; 
   var tnodes = {};        
   var i, row;
   // first pass: build child arrays and initial node array
   for (i=0; i<treeData.length; i++) {
       row = treeData[i];
       tnodes[row.id] = {name: row.name, children: []};
       if (row.parent == -1) { // assume -1 is used to mark the root's "parent"
          root = row.id; 
       } else if (childrenById[row.parent] === undefined) {
          childrenById[row.parent] = [row.id];
       } else {
          childrenById[row.parent].push(row.id);
       }
   }

   function expand(id) {
       if (childrenById[id] !== undefined) {
           for (var i=0; i < childrenById[id].length; i ++) {
               var childId = childrenById[id][i];
               tnodes[id].children.push(expand(childId));
           }
       }
       return tnodes[id];
   }
   return expand(root);
}

console.log(toTree(treeData));

別の SQL クエリを実行して TestOptions テーブルをチェックし、配列 $rows を構成する上記のクエリで返されたレコードのいずれかがこのテーブルの一部でもあるかどうかを確認したいと思います。これは、$rows 配列内の各項目、または配列内の各オブジェクトが、外部キーによって TestOptions テーブルに接続されている可能性があるためです。

これは、テーブル TestOption です。{optionID (PK);phaseID (FK-from TestPhase table); name}

クエリは次のようになります。

Select name from TestOption where phaseID IN (Select id from TestPhase);

基本的に、$rows 配列で返されたアイテムが TestPhase テーブルに存在する場合、それを識別して名前を出力する必要があります。

TestPhase テーブルへのクエリからの $rows 配列のアイテムが TestOptions テーブルに接続されている場合、TestOptions テーブルの name 属性に格納されている name 値を出力することでそれを知らせたいと思います。

どうすればいいですか?配列の各項目でこのチェックを行うにはどうすればよいですか?

4

0 に答える 0