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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2012, 23:19   #41
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

спасибо, но в подразделах могут быть свои подразделы это и роблема
dem66 вне форума Ответить с цитированием
Старый 28.03.2012, 23:34   #42
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
спасибо, но в подразделах могут быть свои подразделы это и роблема
Это, скорее, проблема вашей архитектуры БД - а не проблема, как таковая.
Организуйте правильное и удобное хранение данных - и всё будет ОК.
Удаление элементов в иерархических структурах типа вашей - операция нечастая, потому можно и в несколько запросов это реализовать.
Но лучше - грамотно спроектировать хранение данных.
Andkorol вне форума Ответить с цитированием
Старый 29.03.2012, 14:32   #43
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

а как бы вы спроектировали базу данных для CMS?? точнее для разделов сайта
dem66 вне форума Ответить с цитированием
Старый 29.03.2012, 17:35   #44
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Так общая схема
Код:
CREATE TABLE `Разделы`(
  id int AUTO_INCREMENT,
  parent_id int NULL,
  name varchar,
  FOREIGN KEY (`parent_id`) REFERENCES `Разделы`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB
Учим матчасть .. и все тчк... база сама все удалит
Cronos20 вне форума Ответить с цитированием
Старый 29.03.2012, 18:10   #45
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

огромное спасибо. я тут уже скрипта на php написал для этого. сейчас попробую использовать ваш вариант
dem66 вне форума Ответить с цитированием
Старый 29.03.2012, 18:36   #46
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

теперь немогу залить дамп. пишет;

Код:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`cms`.`razdel`, CONSTRAINT `razdel_ibfk_1` FOREIGN KEY (`razdel`) REFERENCES `razdel` (`id`) ON DELETE CASCADE)
база данных выглядит вот так:
Код:
CREATE TABLE IF NOT EXISTS `razdel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) COLLATE utf8_swedish_ci DEFAULT NULL,
  `url` varchar(200) COLLATE utf8_swedish_ci DEFAULT NULL,
  `uroven` int(11) DEFAULT NULL,
  `razdel` int(11) DEFAULT NULL,
  `sort` int(11) DEFAULT NULL,
  `index` int(2) DEFAULT NULL,
  `published` int(2) DEFAULT NULL,
  `access` int(2) DEFAULT NULL,
  `keywords` text COLLATE utf8_swedish_ci,
  `description` text COLLATE utf8_swedish_ci,
  `type` varchar(20) COLLATE utf8_swedish_ci DEFAULT NULL,
  `onmenu` int(11) DEFAULT NULL,
  FOREIGN KEY (`razdel`) REFERENCES `razdel`(`id`) ON DELETE CASCADE,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=1 ;
FOREIGN KEY (`razdel`) REFERENCES `razdel`(`id`) ON DELETE CASCADE, добавлять нехотело. Пришлось добавить еще и PRIMARY KEY (`id`).

пример инсерта:
Код:
INSERT INTO `razdel` (`id`, `title`, `url`, `uroven`, `razdel`, `sort`, `index`, `published`, `access`, `keywords`, `description`, `type`, `onmenu`) VALUES
(1, 'АвтоГід - Головна', '/index.html', 1, 0, 1, 1, 1, 1, '', '', '1', 1)
а через PMA во вставке все работает
dem66 вне форума Ответить с цитированием
Старый 29.03.2012, 18:46   #47
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

PRIMATY KEY - это понятное дело, надеялся что вы остальное сами допишите

Код:
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`razdel` int(11) UNSIGNED NULL, //думаю что нужно именно NULL без дефолтов, потому что при проверке поля в foreign key при отсутствии родителя он скорее всего 
сначала посмотрит на тип поля и выкинет ошибку, а только потом будет применять дефолтное значение ... хотя могу ошибаться
Зачем вам `uroven` ?
Зачем вам `url` ?

P.S. // так .... заметил, вы вставляете в razdel 0 , а не NULL - это как бы разные вещи

Последний раз редактировалось Cronos20; 29.03.2012 в 18:53.
Cronos20 вне форума Ответить с цитированием
Старый 29.03.2012, 19:18   #48
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

я уже сам увидел. ну а уровень и урл естественно додно для выхова страницы (тоесть урл), второе(ну там короче свои заморочки уже с навигацией в админке).

такой вопрос- у меня есть еще и таблица с контентом страниц.

Код:
CREATE TABLE IF NOT EXISTS `content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `razdel` int(11) DEFAULT NULL,
  `body` text COLLATE utf8_swedish_ci,
  `descrip` text COLLATE utf8_swedish_ci,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=62 ;
короче возможно добавть в таблицу с разделами еще один ключ чтобы когда удаляется запить из разделов оно бы и удаляло контент. пробовал такое зделать и оно посылает, не создает таблицу разделов

Тоесть мне нужно связать razdel.id и content.razdel
------------

Цитата:
PRIMATY KEY - это понятное дело, надеялся что вы остальное сами допишите
аааа. я то думаю что за фигня, он дожен быть а его нету. вот и подкмал что возможно так должно и быть

-----
Цитата:
P.S. // так .... заметил, вы вставляете в razdel 0 , а не NULL - это как бы разные вещи
ну в некоторых местах мне нужен именно 0, на а 0 в разделе был раньше, до переделки и обозначал "корень"

Последний раз редактировалось dem66; 29.03.2012 в 19:56.
dem66 вне форума Ответить с цитированием
Старый 29.03.2012, 20:05   #49
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Код:
CREATE TABLE IF NOT EXISTS `content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `razdel` int(11)  NULL,
  `body` text COLLATE utf8_swedish_ci,
  `descrip` text COLLATE utf8_swedish_ci,
  PRIMARY KEY (`id`),
 FOREIGN KEY (`razdel`) REFERENCES `razdel`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=62 ;
Цитата:
ну в некоторых местах мне нужен именно 0, на а 0 в разделе был раньше, до переделки и обозначал "корень"
Ну теперь если есть внешний ключ, то точно никаких нулей .... сама база не даст вставить ничего лишнего, либо NULL либо корректный id

Последний раз редактировалось Cronos20; 29.03.2012 в 20:07.
Cronos20 вне форума Ответить с цитированием
Старый 29.03.2012, 20:25   #50
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

вот сейчас так получается:

Код:
--
-- Table structure for table `content`
--

CREATE TABLE IF NOT EXISTS `content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `razdel` int(11) DEFAULT NULL,
  `body` text COLLATE utf8_swedish_ci,
  `descrip` text COLLATE utf8_swedish_ci,
  PRIMARY KEY (`id`),
  KEY `razdel` (`razdel`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=48 ;

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

--
-- Table structure for table `razdel`
--

CREATE TABLE IF NOT EXISTS `razdel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) COLLATE utf8_swedish_ci DEFAULT NULL,
  `url` varchar(200) COLLATE utf8_swedish_ci DEFAULT NULL,
  `uroven` int(11) DEFAULT NULL,
  `razdel` int(11) DEFAULT NULL,
  `sort` int(11) DEFAULT NULL,
  `index` int(2) DEFAULT NULL,
  `published` int(2) DEFAULT NULL,
  `access` int(2) DEFAULT NULL,
  `keywords` text COLLATE utf8_swedish_ci,
  `description` text COLLATE utf8_swedish_ci,
  `type` varchar(20) COLLATE utf8_swedish_ci DEFAULT NULL,
  `onmenu` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `razdel` (`razdel`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=60 ;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `content`
--
ALTER TABLE `content`
  ADD CONSTRAINT `content_ibfk_1` FOREIGN KEY (`razdel`) REFERENCES `razdel` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `razdel`
--
ALTER TABLE `razdel`
  ADD CONSTRAINT `razdel_ibfk_1` FOREIGN KEY (`razdel`) REFERENCES `razdel` (`id`) ON DELETE CASCADE;
и иногда при инсертах в контент, оно говорит что неможет обновить content_ibfk_1.

И в php при выводе получаю вот такую ошибку:
Only variables should be assigned by reference
dem66 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Spring MVC Exact Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 21.10.2011 14:38
Thread и MVC OnlyFart ASP.NET 0 06.05.2011 11:12
MVC AgentSmit PHP 2 11.01.2011 14:51
необходимость mvc mrgrudge PHP 2 13.12.2010 12:41
Кликер MVC++ jestyan Помощь студентам 0 10.12.2010 14:10