質問編集履歴
4
テスト-Dを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -615,3 +615,11 @@
|
|
615
615
|
### テスト-C のSQLのみ実行
|
616
616
|
|
617
617
|
![イメージ説明](8e29148648bbf00c98d29684381e3853.png)
|
618
|
+
|
619
|
+
|
620
|
+
|
621
|
+
### テスト-D
|
622
|
+
|
623
|
+
![イメージ説明](16397b733bc83328397eefda239bcae1.png)
|
624
|
+
|
625
|
+
赤い部分に</li>
|
3
SQLの画像を追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -500,13 +500,13 @@
|
|
500
500
|
|
501
501
|
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
502
502
|
|
503
|
-
|
503
|
+
$sql ='SELECT name,level,url,link,(SELECT COUNT(*) FROM tbl AS t2 WHERE t2.l BETWEEN t1.l AND t1.r AND t2.level=t1.level+1) AS child FROM tbl AS t1 ORDER BY l';
|
504
504
|
|
505
505
|
$pdo->query($sql);
|
506
506
|
|
507
|
-
|
507
|
+
$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
|
508
|
-
|
508
|
+
|
509
|
-
|
509
|
+
print get_tree($rows);
|
510
510
|
|
511
511
|
} catch(PDOException $Exception) {
|
512
512
|
|
@@ -609,3 +609,9 @@
|
|
609
609
|
}
|
610
610
|
|
611
611
|
```
|
612
|
+
|
613
|
+
|
614
|
+
|
615
|
+
### テスト-C のSQLのみ実行
|
616
|
+
|
617
|
+
![イメージ説明](8e29148648bbf00c98d29684381e3853.png)
|
2
テスト-Cを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -469,3 +469,143 @@
|
|
469
469
|
### テスト-B
|
470
470
|
|
471
471
|
![イメージ説明](9bcb0ee1163a0f0bb299225db840ec34.png)
|
472
|
+
|
473
|
+
|
474
|
+
|
475
|
+
### テストーC
|
476
|
+
|
477
|
+
```PHP
|
478
|
+
|
479
|
+
$db_user = "***"; // ユーザー名
|
480
|
+
|
481
|
+
$db_pass = "***"; // パスワード
|
482
|
+
|
483
|
+
$db_host = "***"; // ホスト名
|
484
|
+
|
485
|
+
$db_name = "***"; // データベース名
|
486
|
+
|
487
|
+
$db_type = "mysql"; // データベースの種類
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";
|
492
|
+
|
493
|
+
|
494
|
+
|
495
|
+
try {
|
496
|
+
|
497
|
+
$pdo = new PDO($dsn, $db_user,$db_pass);
|
498
|
+
|
499
|
+
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
500
|
+
|
501
|
+
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
502
|
+
|
503
|
+
$sql ='SELECT name,level,url,link,(SELECT COUNT(*) FROM tbl AS t2 WHERE t2.l BETWEEN t1.l AND t1.r AND t2.level=t1.level+1) AS child FROM tbl AS t1 ORDER BY l';
|
504
|
+
|
505
|
+
$pdo->query($sql);
|
506
|
+
|
507
|
+
$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
|
508
|
+
|
509
|
+
print get_tree($rows);
|
510
|
+
|
511
|
+
} catch(PDOException $Exception) {
|
512
|
+
|
513
|
+
die('エラー :' . $Exception->getMessage());
|
514
|
+
|
515
|
+
}
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+
function get_tree($rows){
|
520
|
+
|
521
|
+
$indent=3;
|
522
|
+
|
523
|
+
$l1=0;
|
524
|
+
|
525
|
+
ob_start();
|
526
|
+
|
527
|
+
foreach($rows as $key=>$row){
|
528
|
+
|
529
|
+
$l2=$row["level"];
|
530
|
+
|
531
|
+
$l3=($key<count($rows)-1)?$rows[$key+1]["level"]:0;
|
532
|
+
|
533
|
+
if($l1>=$l2){
|
534
|
+
|
535
|
+
print str_repeat(" ",($l2-1)*$indent);
|
536
|
+
|
537
|
+
}
|
538
|
+
|
539
|
+
if($l1<$l2){
|
540
|
+
|
541
|
+
print PHP_EOL;
|
542
|
+
|
543
|
+
print str_repeat(" ",($l2-1)*$indent);
|
544
|
+
|
545
|
+
$class=$row["level"]>1?" class=\"level{$row["level"]}\"":"";
|
546
|
+
|
547
|
+
print "<ul{$class}>".PHP_EOL;
|
548
|
+
|
549
|
+
print str_repeat(" ",($l2-1)*$indent);
|
550
|
+
|
551
|
+
}
|
552
|
+
|
553
|
+
print "<li>";
|
554
|
+
|
555
|
+
if($row["link"]==1 and $row["url"]!==""){
|
556
|
+
|
557
|
+
/* item-arrowクラスの付け方がおかしかったので修正 */
|
558
|
+
|
559
|
+
$class=$row["child"]>0?" class=\"item-arrow\"":"";
|
560
|
+
|
561
|
+
print "<a href=\"{$row["url"]}\"{$class}>{$row["name"]}</a>";
|
562
|
+
|
563
|
+
}else{
|
564
|
+
|
565
|
+
print $row["name"];
|
566
|
+
|
567
|
+
}
|
568
|
+
|
569
|
+
if($row["child"]>0) print "(".$row["child"].")";
|
570
|
+
|
571
|
+
if($l2==$l3){
|
572
|
+
|
573
|
+
print "</li>".PHP_EOL;;
|
574
|
+
|
575
|
+
}
|
576
|
+
|
577
|
+
if($l2>$l3){
|
578
|
+
|
579
|
+
print "</li>".PHP_EOL;
|
580
|
+
|
581
|
+
for($i=$l2-$l3-1;$i>0;$i--){
|
582
|
+
|
583
|
+
print str_repeat(" ",($i)*$indent);
|
584
|
+
|
585
|
+
print "</ul>".PHP_EOL;
|
586
|
+
|
587
|
+
print str_repeat(" ",($i-1)*$indent);
|
588
|
+
|
589
|
+
print "</li>".PHP_EOL;
|
590
|
+
|
591
|
+
}
|
592
|
+
|
593
|
+
print str_repeat(" ",($l3)*$indent);
|
594
|
+
|
595
|
+
print "</ul>".PHP_EOL;
|
596
|
+
|
597
|
+
}
|
598
|
+
|
599
|
+
$l1=$l2;
|
600
|
+
|
601
|
+
}
|
602
|
+
|
603
|
+
$str=ob_get_contents();
|
604
|
+
|
605
|
+
ob_end_clean();
|
606
|
+
|
607
|
+
return $str;
|
608
|
+
|
609
|
+
}
|
610
|
+
|
611
|
+
```
|
1
テストイメージを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -457,3 +457,15 @@
|
|
457
457
|
どこが悪いのか BBB、CCCにリンクが付きません。
|
458
458
|
|
459
459
|
よろしくお願い致します。
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
### テスト-A
|
464
|
+
|
465
|
+
![イメージ説明](531c28b858b5b3ec3639bcb9beacaf7e.png)
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
### テスト-B
|
470
|
+
|
471
|
+
![イメージ説明](9bcb0ee1163a0f0bb299225db840ec34.png)
|