LINUX.ORG.RU

Хранить порядок изображений в БД

 , ,


0

1

И снова здравствуйте!

В процессе планирования своего маленького веб-приложения, задумался над вопросом: как наиболее эффективно хранить порядок изображений в БД?

Если, предположим, мы имеем галерею из нескольких тысяч картинок

Есть простейшее решение здесь, но полагаю, что можно сделать и лучше.

Т.е, смысл в том, чтобы одно изображение было основным в данном множестве и отображалось в заголовке сообщения на сайте.

Дерзайте, можно тут чего-то красиво сделать?!

★★★★★

Т.е, смысл в том, чтобы одно изображение было основным в данном множестве и отображалось в заголовке сообщения на сайте.

добавь поле и установи ему флаг


как наиболее эффективно хранить порядок изображений в БД?

делал двумя способами
1. позиция целое число и делать сдвиг все последующие картинки, 4 \вставка 5\, далее все инкрементим (5+1)
2. позиция float и просто хранить промежуточное число при вставке, 4 \(если сюда вставляем, то уже позиция будет 4.5)/ 5

kiotoze ★★★★ ()

Две таблицы: одна описывает категорию и хранит индеуюксы, другая реализует one2many связь с картинками. Первая по порядку картинка - главная.

Shadow ★★★★★ ()
Ответ на: комментарий от kiotoze

позиция целое число и делать сдвиг все последующие картинки

Эх, забыта уже нумерация строк в Бейсике :) У меня порядок нумерации изображений — 10,20,30...

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

А смысл? В васике редко больше 10 строк внезапно нужно было вставить, да и RENUM в диалектах спасал. А тут же фоточки можно до посинения переупорядочивать, да и логика перенумерации что-то какая-то мне не очевидная получается.

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

anonymous ()
Ответ на: комментарий от anonymous

А смысл?

По целому ключу работа быстрее идёт, чем по плавающему. И у среднестатистического пользователя, особенно линкусверсионного, голова не будет болеть на тему того, что 3.15 меньше, чем 3.2 :)

А в отличие от сплошного целочисленного варианта, при вставке изображений можно не изгаляться с интерфейсом, а просто иметь поле ввода с предоставленным числом. И если нужна вставка назад, то можно просто его поправить.

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

да и логика перенумерации что-то какая-то мне не очевидная получается.

Чего проще-то, прочитал все картинки в отсортированном виде и обновил в том же порядке поле сортировки начиная с 10 и с шагом 10. Три строчки при структурном оформлении :)

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Ладно. Буду на досуге подумать, тем более что в текущем проекте как раз порядок фоток в TODO задвинут. Сейчас одна главная (min(id)) есть, и пофиг.

Но, чессгря, пока все равно не представил, как 10-20-30 на фронтенде помогут фотки переставлять; а перед update/insert, получается, все равно перенумеровывать, и тоже выгода непонятна.

anonymous ()
Ответ на: комментарий от anonymous

Присоединяюсь к вопросу.

KRoN73, распиши, хоть псевдокодом, что к чему.

Twissel ★★★★★ ()
Ответ на: комментарий от KRoN73

У меня порядок нумерации изображений — 10,20,30...

Плюсую этот вариант, тоже так делал.

pi11 ★★★★★ ()
Ответ на: комментарий от anonymous

пока все равно не представил, как 10-20-30 на фронтенде помогут фотки переставлять

Примерно так:
https://twitter.com/balancer73/status/673867587953012736
:)

Т.е. можно не изгаляясь с GUI/JS и всякими стрелочками просто переписать цифры в порядке фоток.

Кроме того, я планирую подобный подход как-нибудь на форуме задействовать для сортировки изображений в фотогалереях. Опять же, управлять drag-n-drop'ом бывает и неудобно и невозможно, но и лишнее поле добавлять — среднему юзеру это сложно. Зато, например, можно сделать так, что если описание картинки начинается с цифр, то это порядковый номер в фотогалерее. Тогда, если пользователю важен порядок, он просто задаст его в описании.

KRoN73 ★★★★★ ()
Ответ на: комментарий от Twissel

распиши, хоть псевдокодом, что к чему.

Что конкретно, перенумерацию? Будет что-то типа такого:

class Gallery extends Model
{
    function order_renum()
    {
        $idx = 0;
        foreach(Image::find(['gallery_id' => $this->id()])
                ->order('sort_order')
                ->all() as $img)
            $img->set_sort_order($idx=$idx+10);
    }
}

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

А какой смысл индексировать «десятками», что мы выигрываем?!

Twissel ★★★★★ ()
Ответ на: комментарий от KRoN73

Ага, т.е. эти десятки у тебя используются как «направление роста», величины, задающие порядок сортировки.

Хм, оригинально...

Twissel ★★★★★ ()
Ответ на: комментарий от KRoN73

Иными словами это такой вот десятичный «вес» — например, чем он больше тем дальше от начала списка определенная галерея.

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

Twissel ★★★★★ ()
Ответ на: комментарий от KRoN73

Ясно. Спасибо. К сожалению, не мой случай, не вписывается в концепцию - у нас сплошной вебдваноль. Будем таки изгаляться " с GUI/JS и всякими стрелочками" :)

anonymous ()

Кстати, а флаги мы храним в TINYINT, это же вроде как тоже самое, что BOOLEAN?

И лучше не жадничать эти 8 бит? ;-)

P.S. Ага еще и BIT есть же, добавили.

Twissel ★★★★★ ()
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от Twissel

Что бы можно было вставить новую запись, например между 30 и 40 вручную без сдвига

gobot ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.