За последние 24 часа нас посетили 54966 программистов и 1740 роботов. Сейчас ищут 760 программистов ...

Пересчитать и обновить в базе данных позиции после удаления

Тема в разделе "PHP и базы данных", создана пользователем desertFox, 1 сен 2015.

  1. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Здравствуйте.
    Возникла следующая задачка:
    Допустим, в базе данных есть категории, которые сортируются по "position"

    position
    1
    2
    3
    4
    5
    6
    7
    8
    9

    Теперь удаляем несколько категорий:
    Код (PHP):
    1. $sql = "DELETE FROM cats WHERE id_cat IN(3,5,7,8)"; 
    соответственно в базе позиции становятся вида:

    position
    1
    2
    (del 3)
    4
    (del 5)
    6
    (del 7)
    (del 8)
    9

    Т.е. нумерация с пробелами, не по порядку - 1. 2. 4. 6. 9. Как поле "position" изменить, чтобы после удаления сразу нескольких категорий этих пробелов не было? Точнее как обновить порядок, чтобы было снова всё по порядку? - в данном примере стало - 1, 2, 3, 4, 5. Надеюсь ясно выразился :)

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Re: Пересчитать и обновить в базе данных позиции после удале

    Они как были по порядку, так и остались, только с пробелами в айдишниках. Это создает какую-то проблему?
     
  3. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Re: Пересчитать и обновить в базе данных позиции после удале

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

    и, кстати, в поле "position" значения не обязательно уникальные
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Re: Пересчитать и обновить в базе данных позиции после удале

    Мне с 2007 года не встречались такие решения. PHP это чаще всего сайты. А там нельзя менять айдишники категорий. Представь, удалишь первую категорию, и у тебя все страницы переедут по урлу (если в урле есть id категории). От такого поворота, поисковики спрячут твой сайт глубоко-глубоко.
     
  5. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Re: Пересчитать и обновить в базе данных позиции после удале

    разумеется, уникальное поле в базе есть "id_cat", дополнительно для сортировки добавил ещё поле "position", обновлять нужно именно это поле, а не "id_cat" :)

    Добавлено спустя 4 минуты 37 секунд:
    Re: Пересчитать и обновить в базе данных позиции после удаления
    если удалять только одну категорию, то решение простое
    Код (Text):
    1. $sql = "UPDATE cats SET position = position-1 WHERE position >= {$pos} AND position != 0";
    а если сразу несколько категорий удалить, как потом обновлять позиции не знаю
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Re: Пересчитать и обновить в базе данных позиции после удале

    Ну можно удалять по одной... Делать отдельный запрос для каждой категории, потом апдейтить позиции.
    Хотя неравномерность номеров позиций в принципе не шибко усложняет управление порядком.