У меня есть таблица в MySQL, к которой я обращаюсь с PHP. Например, давайте таблица с именем ВЕЩИ:Полностью произвольный порядок сортировки в MySQL с PHP
things.ID - Int первичный ключ
things.name - VARCHAR
things.owner_ID - Int для соединения с другой таблицей
Мой оператор выбора, чтобы получить то, что мне нужно будет выглядеть:
SELECT * FR OM вещи WHERE owner_ID = 99;
Довольно простой. Теперь я хочу, чтобы пользователи могли указать абсолютно произвольный порядок для элементов, возвращаемых из этого запроса. Список будет отображаться, после чего они могут нажать кнопку «вверх» или «вниз» рядом с строкой и переместить ее вверх или вниз по списку или, возможно, операцию перетаскивания, чтобы переместить ее в другое место. Я бы хотел, чтобы этот заказ сохранялся в базе данных (та же или другая таблица). Пользовательский заказ будет уникальным для набора строк для каждого owner_ID.
Я искал способы предоставить этот заказ без везения. Я думал несколько способов реализации этого, но помочь мне заполнить в окончательном варианте:
- Добавить столбец INT и установите его значение то, что мне нужно, чтобы получить строки возвращаемых в моем заказе. Это представляет проблему сканирования строки за строкой, чтобы найти точку вставки, и, возможно, необходимо, чтобы обновил столбец сортировки предыдущих/следующих строк.
- Наличие столбца «Следующий» и «Предыдущий», реализующий связанный список. Как только я нахожу свое место, мне нужно будет обновить максимум 2 строки, чтобы вставить строку . Но для этого требуется сканирование местоположения из строки №1.
- Некоторого SQL/реляционная БД трюка я не знаю ...
Я ищу ответ на # 3, потому что это может быть там, кто знает. Кроме того, я хотел бы как можно больше разгрузить базу данных.
Как это иначе, чем просто включить новый столбец в таблицу вещей для реализации заказа? – Steve
Я понял, что у вас несколько пользователей, и у каждого пользователя может быть другой порядок. Поэтому для каждого пользователя потребуется новый столбец. Чтобы преодолеть эту проблему, используйте вторую таблицу, которая связывает 'user'-' ind indifierifier '-item' вместе (как объяснил Альдо). – apfelbox
Пользователь и элемент уже связаны в исходной таблице. Если я выполняю выбор в таблице с «where user = id order by order_column». Возможно, я должен был упомянуть, что каждый элемент принадлежит только одному пользователю, и этот пользователь может заказывать только свои предметы. – Steve