Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2025, 13:14   #1
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,396
По умолчанию PHP и MS SQL Динамическое дерево Treeview

Доброго дня ребята. подключаю MS SQL Server и строю динамическое дерево Treeview на 1 таблицу
Код:
CREATE TABLE MyTab (
  id INT IDENTITY PRIMARY KEY ,
  name NVARCHAR(80) NOT NULL,
  parentid INT NOT NULL
)  
 
 
INSERT INTO MyTab (name, parentid) OUTPUT INSERTED.* VALUES
(N'Чай', 0),
(N'Сигарет', 0),
(N'Чёрный чай', 1),
(N'Зелёный чай', 1),
(N'Жёлтый чай', 1),
(N'Marlboro', 2),
(N'Winston', 2),
(N'Космос', 2),
(N'Крепких спиртных напитков', 0),
(N'Водка', 9),
(N'Виски;', 9),
(N'Джин', 9),
(N'Самбука', 9),
(N'Коньяк', 9);
Config.php Файл для подключения MS SQL Server
Код:
<?php
 
// -----------------------------------
$uid = "sa";
$pwd = "Pass";
$DB = "DB_Test";
$serverName = "LENOVO";
$connectionInfo = array(
    "UID" => $uid,
    "PWD" => $pwd,
    "Database" => $DB,
    "ReturnDatesAsStrings" => true,
    "CharacterSet" => "UTF-8"
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
 
if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}
 
?>
Потом index.php
Код:
<?php 
 include "config.php";
?>
 
<!DOCTYPE html>
<html>
<head>
    <title>Create treeview with jsTree plugin and PHP</title>
 
    <link rel="stylesheet" type="text/css" href="jstree/dist/themes/default/style.min.css">
    <script src="jquery-3.4.1.min.js"></script>
 
    <script type="text/javascript" src="jstree/dist/jstree.min.js"></script>
</head>
 
 
<body>
    <?php 
    $sql = "SELECT * FROM MyTab";
    $stmt = sqlsrv_query($conn, $sql);
    //------------------
    $folders_arr = array();
    //-----------
 
 
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
    {
        $parentid = $row['parentid'];
        if($parentid == '0') $parentid = "#";
        $selected = false;$opened = false;
    
        if($row['id'] == 2)
        {
            $selected = true;$opened = true;
        }
        $folders_arr[] = array
        (
            "id"=>$row['id'],
            "parent"=>$parentid,
            "text"=>$row['name'],
            "state" => array
            (
                "selected" => $selected,
                "opened"=>$opened
            ) 
        );
    }
 
    ?>
 
    <!-- Initialize jsTree -->
    <div id="folder_jstree"></div>
 
    <!-- Store folder list in JSON format -->
    <textarea id='txt_folderjsondata'><?= json_encode($folders_arr) ?></textarea>
 
    <!-- Script -->
    <script type="text/javascript">
    $(document).ready(function(){
        var folder_jsondata = JSON.parse($('#txt_folderjsondata').val());
 
        $('#folder_jstree').jstree({ 'core' : {
            'data' : folder_jsondata,
            'multiple': false
        }, });
      
    });
    </script>
</body>
</html>
Есть там ещё JS файл , выкладываю архив treeview.rar
Всё работает красиво да… А сейчас вопрос: Если у меня есть “родительский и дочерний таблица” так на пример
Код:
-------------родительский на пример-------
create table Product (p_id int identity(1,1) primary key,
                      p_Name nvarchar(50)
                      )
 
-----------Добавляю даных---------------
insert into Product(p_Name) 
output  inserted.*
values(N'Чай'),
      (N'Сигарет')
 
 
------На пример создаю дочерней таблица ! Чай ест разние и сигарет тоже ;)
create table Tip_Tovar(id int identity,
                       tipName nvarchar(40),
                       ProductID int constraint FK_Prod foreign key(ProductID)
                                     references Product(p_id)
                                     on delete cascade)
-------------Добавляю дочерней таблице---------------
insert into Tip_Tovar(tipName, ProductID)
output  inserted.*
values(N'Чёрный чай',1),
      (N'Зелёный чай',1),
      (N'Жёлтый чай',1),
      (N'Marlboro',2),
      (N'Winston',2)
Как переделать это цикл
Код:
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)
Чтобы отображал table Product.p_id=Tip_Tovar.ProductID
Изображения
Тип файла: jpg Пример_TreeView.jpg (57.8 Кб, 17 просмотров)
Вложения
Тип файла: rar treeview.rar (335.9 Кб, 1 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 31.03.2025, 15:00   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 503
По умолчанию

xxbesoxx, вы знаете что такое соединения таблиц, так называемые джоины?
https://ru.wikipedia.org/wiki/Join_(SQL)

Вы немного не правильно ставите задачу. Первая таблица должна быть category в которой будет храниться дерево вся иерархия товаров.
Вторая таблица это товары которая содержит только "листья от дерева". У товара должна быть связь с категорией через внешний ключ содержащий category_id.

Опишите конечную цель этого скрипта.

Последний раз редактировалось Valick; 31.03.2025 в 15:28.
Valick вне форума Ответить с цитированием
Старый 31.03.2025, 17:32   #3
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,396
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
Вы немного не правильно ставите задачу.
Спасибо за внимание . Вы имеете в виду такой запрос ?
Код:
select t.id, t.tipName,  p.p_Name, t.ProductID
from Tip_Tovar as t 
left join Product as p
on t.ProductID=p.p_id
xxbesoxx вне форума Ответить с цитированием
Старый 31.03.2025, 17:35   #4
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,396
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
Первая таблица должна быть category в которой будет храниться дерево вся иерархия товаров.
Вторая таблица это товары которая содержит только "листья от дерева". У товара должна быть связь с категорией через внешний ключ содержащий category_id.
Есть же такой таблицы есть связь между ними .
Код:
-------------родительский на пример-------
create table Product (p_id int identity(1,1) primary key,
                      p_Name nvarchar(50)
                      )
 
-----------Добавляю даных---------------
insert into Product(p_Name) 
output  inserted.*
values(N'Чай'),
      (N'Сигарет')
 
 
------На пример создаю дочерней таблица ! Чай ест разние и сигарет тоже ;)
create table Tip_Tovar(id int identity,
                       tipName nvarchar(40),
                       ProductID int constraint FK_Prod foreign key(ProductID)
                                     references Product(p_id)
                                     on delete cascade)
-------------Добавляю дочерней таблице---------------
insert into Tip_Tovar(tipName, ProductID)
output  inserted.*
values(N'Чёрный чай',1),
      (N'Зелёный чай',1),
      (N'Жёлтый чай',1),
      (N'Marlboro',2),
      (N'Winston',2)
Я спросил показать пример ! А вы меня рассказывайте про название таблицы category . Может я просто T1 и T2 назову . Вы мне на .wikipedia посылайте для изучение джоины ? Ладно,
Код:
 select *
 from Product as p
 Left join Tip_Tovar as t
 on p.p_id=t.ProductID
Попросил показать пример на этих таблице. как я знаю это допустимо на форуме. Если вы это (не хотите) или (не умеете) и.т.г лучше проигнорируйте не отвечайте...

Последний раз редактировалось xxbesoxx; 31.03.2025 в 18:24.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое дерево файловой системы Adam77 PHP 0 22.04.2021 14:47
TreeView и дерево каталога alex_dss C++ Builder 2 13.03.2015 21:11
C++, динамическое дерево OmegaBerkut Visual C++ 0 20.12.2013 13:52
Динамическое дерево _T_A_R_A_S_ Общие вопросы C/C++ 1 20.05.2013 00:54
Не грузится дерево в TreeView artemavd Общие вопросы Delphi 0 23.04.2012 20:26