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

Форум MySQL

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

 

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

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

тема: Как удалить категорию и все подкатегори и товары...
 
 автор: spyder   (17.05.2006 в 15:49)   письмо автору
 
 

Есть прайс-лист на копм. технику, соответственно категории, подкатегории и товар.
Подскажите как сделать Если я удаляю категорию напр-р копмы и в ней еще находится(подкатегории и товар) чтоб не только сама категория удалилась но и все что в не находится.
структура таблицы
id - auto incement
id_major - (напр-р есть категория комп. у неё id_major 01 и в ней же находятся ещё категории "Комп. Compaq" у неё id_major 0101 и т.д.)
name
isFolder - если стоит 1 то это категория(подкатегория), если пусто то товар

   
 
 автор: cheops   (17.05.2006 в 22:59)   письмо автору
 
   для: spyder   (17.05.2006 в 15:49)
 

Если нет возможности использовать внешние ключи (это таблицы типа InnoDB) придётся осуществлять удаление в несоколько запросов - сначала из подчинённых программ, потом из основной таблицы.

   
 
 автор: Spyder   (18.05.2006 в 13:41)   письмо автору
 
   для: cheops   (17.05.2006 в 22:59)
 

нет, MyISAM
Таблица одна

   
 
 автор: cheops   (18.05.2006 в 22:49)   письмо автору
 
   для: Spyder   (18.05.2006 в 13:41)
 

А, если таблица одна, тогда придётся испльзовать рекурсивную функцию удаления. Не очень понятна структура поля id_major - оно как строится?

   
 
 автор: spyder   (19.05.2006 в 07:50)   письмо автору
 
   для: cheops   (18.05.2006 в 22:49)
 

раньше через Excel данные перекидывали. Там так сделали.
я сам еле разобрался с этой структурой.
Попробую ещё раз объяснить
Все категории и подкатегории отмечаются в столбце isFolder единицой. Если пусто или ноль то это товар. А в id_major отмечают, категория первая стоит 01, в ней находятся ещё подкатегории они уже отмечаются так 0101, 0102 и т.д. И тогда у товара простовляется 010101 и т.д.
т.е. первые две цифры отвечают к какой категории относится товар или подкатегория и т.д. В зависимости от ерархии категорий.

   
 
 автор: cheops   (19.05.2006 в 11:39)   письмо автору
 
   для: spyder   (19.05.2006 в 07:50)
 

Т.е. удаление категории сводится к удалению всех записей, поле id_major которых начинается с "01"?

   
 
 автор: spyder   (19.05.2006 в 15:12)   письмо автору
 
   для: cheops   (19.05.2006 в 11:39)
 

да

   
 
 автор: cheops   (19.05.2006 в 22:36)   письмо автору
 
   для: spyder   (19.05.2006 в 15:12)
 

Тогда можно поступить следующим образом
DELETE FROM tbl WHERE id_major LIKE '01%'

   
 
 автор: spyder   (22.05.2006 в 14:00)   письмо автору
 
   для: cheops   (19.05.2006 в 22:36)
 

Большое спасибо!!! Все получилось.
Ещё вопросик! Как можно узнать id_major последней категории.

   
 
 автор: cheops   (22.05.2006 в 16:13)   письмо автору
 
   для: spyder   (22.05.2006 в 14:00)
 

В смысле последний?

   
 
 автор: Spyder   (22.05.2006 в 19:36)   письмо автору
 
   для: cheops   (22.05.2006 в 16:13)
 

в прямом
напр-р: первая категория комп. 01, HDD 02, MOUSE 03 .... Офисная техника 17.
как можно узнать последнию категорию напр-р Офисная техника.

   
 
 автор: cheops   (22.05.2006 в 19:51)   письмо автору
 
   для: Spyder   (22.05.2006 в 19:36)
 

А они за сотню не вылазят? Если нет, то можно попробовать следующий запрос
SELECT MAX(SUBSTRING(id_major,1,2)) AS id_major FROM tbl

   
 
 автор: Spyder   (22.05.2006 в 19:54)   письмо автору
 
   для: cheops   (22.05.2006 в 19:51)
 

нет.

   
 
 автор: Spyder   (24.05.2006 в 15:05)   письмо автору
 
   для: Spyder   (22.05.2006 в 19:54)
 

Сделал как вы написали, все работает выдает последний id_major категории.
Мне нужно это было для создания новой категории.
Когда я захожу на стр для создания новой категории, мне показывает последний номер категории с уже увеличенным на единицу id_major, заполняю данные все отправляет сохраняет. Но когда я захожу заново на стр создания категории он мне показывает id_major предыдущий и только после обновления странички он уже выставляет новый номер это в Opere 8.5 и IE, а в firefox работает нормально.
Подскажите как можно исправить.

   
 
 автор: cheops   (24.05.2006 в 21:51)   письмо автору
 
   для: Spyder   (24.05.2006 в 15:05)
 

Страница кэшируется - подавите кэширование, как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=260.

   
 
 автор: spyder   (25.05.2006 в 12:37)   письмо автору
 
   для: cheops   (24.05.2006 в 21:51)
 

Все получилось.
САМЫЙ ЛУЧШИЙ ФОРУМ для новичков. Большое спасибо!!!

   
 
 автор: spyder   (25.05.2006 в 22:44)   письмо автору
 
   для: spyder   (25.05.2006 в 12:37)
 

Снова проблема. На этот раз с добавлением продукции в категорию
Проблемы вычеслить номер последней продукции и увеличить на единицу для добавления новой.
Вот код

<?php
//соединение с БД
require_once("config.php");
$test $_POST['id_major'];
echo 
"nt<br>";
echo 
"$test";
//Проверяем сколько продукции находится в данной категории
$query mysql_query"SELECT id_major, name FROM 311cd_price_draft WHERE id_major LIKE '".$_POST['id_major']."%' and isFolder=' ' ORDER BY id_major");

  if(
$query)
   {
    
//получаем максимальный элемент столбца
    
$major mysql_fetch_array($query);
    
$id_major $major['id_major'] + 1;
   }
   echo 
"<br>$id_major";
?>

помогите плиз!!!!

   
 
 автор: cheops   (25.05.2006 в 22:48)   письмо автору
 
   для: spyder   (25.05.2006 в 22:44)
 

Т.е. максимальный номер для текущей категории? По сути из значений
XXYY

нам следует выбрать максимальное значение из YY?

   
 
 автор: Spyder   (25.05.2006 в 22:53)   письмо автору
 
   для: cheops   (25.05.2006 в 22:48)
 

напр-р подкатегория с id_major 0101
в ней находится товар с номерами 010101, 010102 и т.д
мне нужно выбрать последний номер и увеличить на единицу.

   
 
 автор: cheops   (26.05.2006 в 02:11)   письмо автору
 
   для: Spyder   (25.05.2006 в 22:53)
 

Подкатегории могут быть любой длины или они всегда из 4 символов состоят?

   
 
 автор: Spyder   (26.05.2006 в 07:10)   письмо автору
 
   для: cheops   (26.05.2006 в 02:11)
 

любой.
Получилось сделать запрос на максимальное значение

$query = mysql_query( "SELECT id_major, name FROM 311cd_price_draft WHERE id_major = (select max(id_major) from 311cd_price_draft where id_major LIKE '".$_POST['id_major']."%' and isFolder=' ') ORDER BY id_major");

  if($query)
   {
    //получаем максимальный элемент столбца
    $major = mysql_fetch_array($query);
    $id_major = $major['id_major'];
   }
   echo "<br>$id_major";
?>

но вот только не получается увеличить на единицу.
напр-р: вывел последний номер товара в определенной категории.
01030205
но если я делаю инкеремент

//получаем максимальный элемент столбца
    $major = mysql_fetch_array($query);
    $id_major = $major['id_major'];
   $id_major++;

то он мне выводит 1030206 а мне нужно 01030206.
Подскажите как осуществить операцию без потери нуля?

   
 
 автор: spyder   (26.05.2006 в 18:59)   письмо автору
 
   для: Spyder   (26.05.2006 в 07:10)
 

Народ помогите плиз!!!

   
 
 автор: Spyder   (29.05.2006 в 08:44)   письмо автору
 
   для: spyder   (26.05.2006 в 18:59)
 

cheops помоги плиз!!!

   
 
 автор: Trianon   (29.05.2006 в 10:08)   письмо автору
 
   для: Spyder   (26.05.2006 в 07:10)
 

$id_major = $major['id_major'];
$id_major = str_pad($id_major+1, strlen($id_major), "0", STR_PAD_LEFT);

   
 
 автор: Spyder   (29.05.2006 в 11:01)   письмо автору
 
   для: Trianon   (29.05.2006 в 10:08)
 

Спасибо Trianon.
получилось, но только нужно проверять если категория начинается с нуля, то добавлять а если больше то ноль не нужно подставлять. Как узнать первый символ в строке?

   
 
 автор: Trianon   (29.05.2006 в 11:05)   письмо автору
 
   для: Spyder   (29.05.2006 в 11:01)
 

А что, если начинается не с нуля, то работает неправильно?
По идее, должно правильно работать в любом случае.

   
 
 автор: Spyder   (29.05.2006 в 11:13)   письмо автору
 
   для: Trianon   (29.05.2006 в 11:05)
 

не знаю может и должно но у меня если идет номер 1001и добавляю товар то он пишет 0100107
Да и ещё заметил, у меня все подкатегории выводятся в <select><option> и как вы говорите должен в любом случае работать, но у меня такая ситуация получилась, через одну строку подставляет 0, т.е. Сканеры идет номер 100107, если выбираю следующию категорию то ставит 0100206. Как так получается

   
 
 автор: Trianon   (29.05.2006 в 12:00)   письмо автору
 
   для: Spyder   (29.05.2006 в 11:13)
 

Операция +1 выполняется так, как Вы хотели:
<?
$id_major 
"01030205";
echo 
"$id_major + 1 =";
$id_major str_pad($id_major+1strlen($id_major), "0"STR_PAD_LEFT);
echo 
"$id_major<br>";

$id_major "1001";
echo 
"$id_major + 1 =";
$id_major str_pad($id_major+1strlen($id_major), "0"STR_PAD_LEFT);
echo 
"$id_major<br>";
?>

01030205 + 1 =01030206
1001 + 1 =1002

Ничего другого реализовать не пытался.

   
Rambler's Top100
вверх

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