Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP+MySQL, Как организовать проход по дереву... 
:(
    Опции темы
Rodman
Дата 12.3.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Дароф.

Начал вот в РНР разбираться...

у меня есть база с таблицей imagedata...
-------------
IDT - счетчик
FirstNum - номер уровня
ImageSource - путь к рисунку
NextImage1, NextImage2, NextImage3 - номера уровней доступных из данного
------------------

я написал как вывести первый..

Код

<?php
    /* Соединяемся, выбираем базу данных */
    $link = mysql_connect("localhost", "root", "") or die("Could not connect : " . mysql_error());
    print "Connected successfully";
    mysql_select_db("plump") or die("Could not select database");
    /* Выполняем SQL-запрос */
    $query = "SELECT IDT, FirstNum, ImageSource, NextImage1, NextImage2, NextImage3 FROM imagedata WHERE (FirstNum=0);";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    /* Выводим результаты в html */
    print "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n";
    print "\t<tr>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
    {
            print "\t\t<td><a href = ".$line["IDT"]."><img src = ".$line["ImageSource"]."><a></td>\n";           
    }
    print "\t</tr>\n";
    print "</table>\n";
    /* Освобождаем память от результата */
    mysql_free_result($result);
    /* Закрываем соединение */
    mysql_close($link);
?>  


как можно сделать так чтобы при выводе 3 рисунков, я нажимал на выбранный и далее открывался следующий уровень (доступный из него)??? и так до конца дерева...

Сенкс
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mishaSL
Дата 12.3.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(Rodman @  12.3.2007,  11:51 Найти цитируемый пост)
у меня есть база с таблицей imagedata...


У вас очень странная структура таблицы. Приведите несколько записей из таблицы и описание самой задачи, для которой вы создали такую таблицу.



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Rodman
Дата 12.3.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



1 - 0 - D:\Im\0.jpg - 1 - 2 - 3
2 - 1 - D:\Im\1.jpg - 11 - 12 - 13
3 - 2 - D:\Im\2.jpg - 21 - 22 - 23
4 - 3 - D:\Im\3.jpg - 31 - 32 - 33

первое это счетчик...

а дальше уже узел... из нулевого доступны 1,2,3 (три поля после названия)...

из первого - 11 - 12 - 13 и т.д.

так вот как сделать, чтобы после того как я из первых трех (1,2,3 уровни отображаются на экране) выбираю, предположим, первый - открывались следующие три - 11, 12, 13... 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mishaSL
Дата 12.3.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



На основании этой базы и этого кода можно сделать так:
Код

<?php
    /* Соединяемся, выбираем базу данных */
    $link = mysql_connect("localhost", "root", "") or die("Could not connect : " . mysql_error());
    print "Connected successfully";
    mysql_select_db("plump") or die("Could not select database");
    /* Выполняем SQL-запрос */
    $level = (empty($_GET['level']) ? 0 : intval($_GET['level']));
    $query = "SELECT IDT, FirstNum, ImageSource, NextImage1, NextImage2, NextImage3 FROM imagedata WHERE FirstNum=".$level);
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    /* Выводим результаты в html */
    print "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n";
    print "\t<tr>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
    {
            print "\t\t<td><a href = ".$line["IDT"]."><img src = ".$line["ImageSource"]."><a><br />";
            print '<a href="?level='.$line['NextImage1'].'">уровень '.$line['NextImage1'].'</a><br />';
            print '<a href="?level='.$line['NextImage2'].'">уровень '.$line['NextImage2'].'</a><br />';            
            print '<a href="?level='.$line['NextImage3'].'">уровень '.$line['NextImage3'].'</a><br />';
            print "</td>\n";           
    }
    print "\t</tr>\n";
    print "</table>\n";
    /* Освобождаем память от результата */
    mysql_free_result($result);
    /* Закрываем соединение */
    mysql_close($link);
?>  


Но структура таблицы очень странныя. Может быть разрешено только 3 уровня? По идее связи нужно вынести в отдельную таблицу.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Rodman
Дата 12.3.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



mishaSL, попробую...


Цитата(mishaSL @  12.3.2007,  16:02 Найти цитируемый пост)
 По идее связи нужно вынести в отдельную таблицу

ну это пока я начал... не факт что доступно только три ветки...  может быть и больше...

как организую базу - это мое дело (никто меня не ограничивает), но как еще можно организовать - предложи...

типа 

таблица imagedata
**************
IDT
NameImage
LevelI
**************

таблица imagelinks
**************
IDT
IDLevel
NextLevel
**************
???

Это сообщение отредактировал(а) Rodman - 12.3.2007, 17:40
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mishaSL
Дата 12.3.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(Rodman @  12.3.2007,  17:39 Найти цитируемый пост)
как еще можно организовать - предложи


Насколько я понял - это фотогалерея. К каждой фотографии может быть привязано еще несколько. Никаких категорий и других сущностей нет.

Тогда я бы сделал так:
Код

CREATE TABLE `img` (
  `img_id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(30) NOT NULL default '',
  `src` varchar(30) NOT NULL default '',
  PRIMARY KEY  (`img_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Таблица с картинками' AUTO_INCREMENT=1 ;


CREATE TABLE `relation` (
  `rel_id` int(10) unsigned NOT NULL auto_increment,
  `img_id` int(10) unsigned NOT NULL default '0',
  `parent_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`rel_id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Связи картинок' AUTO_INCREMENT=1 ;



name - название фотографии
src - путь к фотографии

Плюсы данной структуры:
1. Неограниченная вложенность фотографий
2. Каждая фото может быть вложено сразу в несколько разделов
3. Убобство выборки и обновления данных (при обновлении также простое изменение вложенности)




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Rodman
Дата 13.3.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Цитата(mishaSL @  12.3.2007,  17:14 Найти цитируемый пост)
Насколько я понял - это фотогалерея. 

не совсем, но работа с рисунками есть. 

эта работа для пользователей, которые хотят подобрать себе необходимый инвентарь выбирая подходящий - пока не завершится движение... еще будут характеристики каждой "картинки"

буду пробовать...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mishaSL
Дата 13.3.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Rodman, пробуй, но лучше структуру базы продумать до написания кода, обрати внимание на структуру которую я тебе предложил, думаю она должна подойти к твоей задаче.

Добавлено @ 12:04 
Считаем вопрос решеным?


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Denwer
Дата 24.6.2007, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Спасибо, с деревьями разобрался, но вот вопрос. Как сделать ссылку(просто вывести название категории) неактивной, находясь на странице?
PM WWW   Вверх
Glip
Дата 25.6.2007, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 1
Всего: 18



Цитата(mishaSL @ 12.3.2007,  18:14)

Тогда я бы сделал так:
Код

CREATE TABLE `img` (
  `img_id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(30) NOT NULL default '',
  `src` varchar(30) NOT NULL default '',
  PRIMARY KEY  (`img_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Таблица с картинками' AUTO_INCREMENT=1 ;


CREATE TABLE `relation` (
  `rel_id` int(10) unsigned NOT NULL auto_increment,
  `img_id` int(10) unsigned NOT NULL default '0',
  `parent_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`rel_id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Связи картинок' AUTO_INCREMENT=1 ;


а если parent_id поместить сразу в таблицу img и сделать его FOREIGN KEY на img_id ?


--------------------
user posted image
PM MAIL   Вверх
mishaSL
Дата 26.6.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(Glip @  25.6.2007,  07:29 Найти цитируемый пост)
а если parent_id поместить сразу в таблицу img и сделать его FOREIGN KEY на img_id ? 

Тогда картинка будет иметь только одного предка, а необходимо чтобы предков было неограниченное кол-во.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.