2015-10-21 15 views
5

Vì một số lý do cần hiển thị dữ liệu từ cơ sở dữ liệu mysql trong 2 chế độ xem dạng cây khác nhau.cách hiển thị cơ sở dữ liệu có cấu trúc phân cấp trong chế độ xem dạng cây?

Ví dụ

Tree view 1 (sử dụng thẻ danh sách):

<li>level1 (Root) 
 
\t <ul> 
 
\t \t <li>level2</li> 
 
\t \t <li>level2 
 
\t \t \t <ul> 
 
\t \t \t \t <li>level3</li> 
 
\t \t \t \t <li>level3 
 
\t \t \t \t \t <ul> 
 
\t \t \t \t \t \t <li>level4</li> 
 
\t \t \t \t \t \t <li>level4</li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </li> 
 
\t \t \t </ul> 
 
\t \t </li> 
 
\t \t <li>level2 
 
\t \t \t <ul> 
 
\t \t \t \t <li>level3</li> 
 
\t \t \t \t <li>level3 
 
\t \t \t \t \t <ul> 
 
\t \t \t \t \t \t <li>level4</li> 
 
\t \t \t \t \t \t <li>level4</li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </li> 
 
\t \t \t </ul> 
 
\t \t </li> 
 
\t </ul> 
 
</li>

Tree view 2:

enter image description here

Tôi hiện đang làm việc trên kịch bản php này:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "psswd_here"; 
$dbname = "db_here"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) 
{ 
    die("Connection failed: " . $conn->connect_error); 
} 

$data = array(); 
$index = array(); 
$sql2 = "SELECT * FROM categories ORDER BY name"; 
$result2 = $conn->query($sql2); 

if ($result2->num_rows > 0) 
{ 
     while ($row2 = $result2->fetch_assoc()) 
     { 
       $id = $row2["id"]; 
       $parent_id = $row2["parent_id"] === NULL ? "NULL" : $row2["parent_id"]; 
       $data[$id] = $row2; 
       $index[$parent_id][] = $id; 
     } 
} 
else 
{ 
    echo "0 results"; 
} 

$conn->close(); 

function display_child_nodes($parent_id, $level) 
{ 
    global $data, $index; 
    $parent_id = $parent_id === NULL ? "NULL" : $parent_id; 
    if (isset($index[$parent_id])) 
     { 
     foreach ($index[$parent_id] as $id) 
       { 
      echo str_repeat("-", $level) . $data[$id]["name"] . "<br>"; 
      display_child_nodes($id, $level + 1); 
     } 
    } 
} 

echo '<ul>'; 
display_child_nodes(NULL, 0); 
echo '</ul>'; 
?> 

OUTPUT:

Electronics 
-Cameras and Photography 
--Accessories 
--Camcorders 
--Digital Cameras 
-Cell Phones and Accessories 
--Accessories 
--Cell Phones 
--Smartphones 
-Computers and Tablets 
--Desktops 
--Laptops 
--Netbooks 
--Tablets 
---Android 
---iPad 
-TV and Audio 
--Home Audio 
--Speakers and Subwoofers 
--Televisions 
---CRT 
---LCD 
---LED 
---Plasma 

Dưới đây là giản đồ cơ sở dữ liệu ..

-- phpMyAdmin SQL Dump 
-- version 4.4.12 
-- http://www.phpmyadmin.net 
-- 
-- Host: 127.0.0.1 
-- Generation Time: Oct 21, 2015 at 09:16 AM 
-- Server version: 5.6.25 
-- PHP Version: 5.6.11 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8mb4 */; 

-- 
-- Database: `binary` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `categories` 
-- 

CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(10) NOT NULL, 
    `parent_id` int(10) DEFAULT NULL, 
    `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

-- 
-- Dumping data for table `categories` 
-- 

INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUES 
(1, NULL, 'Electronics'), 
(2, 1, 'Cameras and Photography'), 
(3, 1, 'Computers and Tablets'), 
(4, 1, 'Cell Phones and Accessories'), 
(5, 1, 'TV and Audio'), 
(6, 2, 'Digital Cameras'), 
(7, 2, 'Camcorders'), 
(8, 2, 'Accessories'), 
(9, 3, 'Laptops'), 
(10, 3, 'Desktops'), 
(11, 3, 'Netbooks'), 
(12, 3, 'Tablets'), 
(13, 4, 'Cell Phones'), 
(14, 4, 'Smartphones'), 
(15, 4, 'Accessories'), 
(16, 5, 'Televisions'), 
(17, 5, 'Home Audio'), 
(18, 5, 'Speakers and Subwoofers'), 
(19, 16, 'CRT'), 
(20, 16, 'LCD'), 
(21, 16, 'LED'), 
(22, 16, 'Plasma'), 
(23, 12, 'Android'), 
(24, 12, 'iPad'); 

-- 
-- Indexes for dumped tables 
-- 

-- 
-- Indexes for table `categories` 
-- 
ALTER TABLE `categories` 
    ADD PRIMARY KEY (`id`); 

-- 
-- AUTO_INCREMENT for dumped tables 
-- 

-- 
-- AUTO_INCREMENT for table `categories` 
-- 
ALTER TABLE `categories` 
    MODIFY `id` int(10) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=25; 
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
+0

và câu hỏi là? – e4c5

Trả lời

0

Xem mã của tôi liệt kê dưới đây

bạn chỉ cần đặt ở đây css cho thiết kế chính xác của bạn

$servername = "localhost"; 
$username = "root"; 
$password = "psswd_here"; 
$dbname = "db_here"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) 
{ 
    die("Connection failed: " . $conn->connect_error); 
} 

function getCategory($parent_id){ 
    global $conn; 
    $sql2 = "SELECT * FROM categories WHERE parent_id='".$parent_id."' ORDER BY name"; 
    $result2 = $conn->query($sql2); 

    if (mysqli_num_rows($result2) > 0) 
    { 
     echo "<ul>"; 
     while ($row2 = mysqli_fetch_object($result2)) 
     { 
      echo "<li>".$row2->name."</li>"; 
      getCategory($row2->id);  
     } 
     echo "</ul>"; 
    } 
} 


//Set Parent id 
$parent_id = 0; 
getCategory($parent_id); 

Lưu ý: Root loại PARENT_ID là 0

Các vấn đề liên quan