Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: разделить таблицу
 
 автор: Slo_Nik   (27.07.2010 в 00:31)   письмо автору
81.4 Кб
 
 

Добрый вечер.
Подскажите, пожалуйста, как лучше сделать?
Есть таблица, в ней три поля, id, razdel и podrazdel, в этих полях хранится информация о направлениях деятельности разных фирм.
Как это выглядит я прикрепил скриншот.
Вопрос в следующем, лучше будет если разделить информацию с таблицы на две разные или оставить как есть?
Инофрмация с таблицы используется для регистрации новой фирмы на сайте и для вывода информации о всех фирмах по направлениям деятельности.

  Ответить  
 
 автор: neadekvat   (27.07.2010 в 01:34)   письмо автору
 
   для: Slo_Nik   (27.07.2010 в 00:31)
 

Два варианта (закроем глаза на не то русские, не то английские названия полей):
одна таблица со следующей структурой:
id_section
parent_razdel
razdel

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

  Ответить  
 
 автор: Slo_Nik   (27.07.2010 в 08:24)   письмо автору
 
   для: neadekvat   (27.07.2010 в 01:34)
 

изначально таблицу создавал не я, мне надо привести в порядок базу данных, которая и без создания дополнительной таблицы и так большая (72 таблицы).
Хотя Ваш довод показал, что прийдётся разделять таблицу....

  Ответить  
 
 автор: Лена   (27.07.2010 в 10:42)   письмо автору
 
   для: Slo_Nik   (27.07.2010 в 08:24)
 

Я бы на две делила так:

- создать новую таблицу razdel с автоинкрементом, поля id, razdel
- вытянуть в нее все названия разделов
- удалить дубликаты, где названия разделов повторяются


-создать новую таблицу podrazdel с автоинкрементом, поля - id,podrazdel,id_razdel
- перебросить в нее все названия подразделов
- перебросить id разделов из новой таблицы razdel(вот это как-то плохо получается, потому как id наверное руками придется вставлять )

  Ответить  
 
 автор: Trianon   (27.07.2010 в 11:08)   письмо автору
 
   для: Лена   (27.07.2010 в 10:42)
 

руками не придется - можно запрос написать.

Но я бы прислушался к совету neadekvat'а и сделал бы дерево разделов на одной таблице - фактура модели не позволяет сделать вывод, что двумя уровнями всё и закончится.
Вернее, позволяет сделать вывод строго обратный - что место в каталоге для каждого элемента будут лишь уточнять.
Это, кстати, напрашивается уже из названия полей раздел/подраздел

  Ответить  
 
 автор: Лена   (27.07.2010 в 12:11)   письмо автору
 
   для: Trianon   (27.07.2010 в 11:08)
 

>руками не придется - можно запрос написать.

У меня получается только в два запроса и при том, что в старой таблице нужно создать дополнительное поле с указанием нового id раздела:
old_razdel- старая таблица
new_razdel - новая таблица разделов
podrazdel - новая таблица подразделов


UPDATE old_razdel oldr SET oldr.new_id = nr.id            
LEFT JOIN new_razdel nr ON  oldr.razdel = nr.razdel  //соединяем столбцы по названию разделов

UPDATE podrazdel pr SET pr.id_razdel = oldr.new_id
LEFT JOIN old_razdel oldr ON  oldr.razdel = pr.razdel


Что-то мне кажется, что это я окольными путями пошла...


>Но я бы прислушался к совету neadekvat'а и сделал бы дерево разделов на одной таблице - фактура модели не позволяет сделать вывод, что двумя уровнями всё и закончится.
>Вернее, позволяет сделать вывод строго обратный - что место в каталоге для каждого элемента будут лишь уточнять.
>Это, кстати, напрашивается уже из названия полей раздел/подраздел

Я в основном так и делаю, когда древовидная структура, другой вариант, думала, проще.

  Ответить  
 
 автор: lElectroHardl   (27.07.2010 в 10:59)   письмо автору
 
   для: neadekvat   (27.07.2010 в 01:34)
 

>>>Мне просто интересно, что вы будете делать, если появится необходимость переименовать какой-либо раздел..перебирать всю базу - это, имхо, ошибка.
А вот этим воспользоваться нельзя?
("UPDATE data SET ings = ( REPLACE (ings, 'что заменить', 'на что'))",$db);

Устами Лены глаголет истина :). У самого такая же структура.

  Ответить  
 
 автор: Slo_Nik   (28.07.2010 в 10:29)   письмо автору
68.7 Кб
 
   для: Slo_Nik   (27.07.2010 в 00:31)
 

Лена, сначал так и думал сделать, но останавливало то, что надо делать ещё одну таблицу, а их и так в базе достаточно.
Trianon, думаю, что понял Вас и neadekvat , сделал всё в одной таблице.
Вот что получилось.
id_section INT(3) NIT NULL AUTO_INCREMENT - это понятно
parent_id INT(3) NOT NULL - для связи раздела с подразделом
name_section VARCHAR(100) - имена разделов и подразделов

сначала в базу заносится раздел, для которого значение parent_id устанавливается "0"
помом для раздела заносятся подразделы, для которых значение parent_id равно значению id_section разделов.
для наглядности прилагаю скриншот. цветом отмечены разделы и соответствующие подразделы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования