21

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Пане koala, а для цієї задачки могло б бути таке рішення, за умови що я правильно зрозумів саму задачку.
Якщо нам необхідно просто міксувати сутності за вподобанням користувача, то я б створив би дві таблиці.
Одна таблиця, скажімо DescribeEntity має Id  і опис сутностей, скільки тих там даних є , неважливо, ця таблиця неміксується ніяк.
Інша ж таблиця, наприклад, Users_Mix - в якій і буде Користувач міксувати поля , має всього лиш два поля(атрибути) Id від 1 то скільки вам потрібно та інше поле Mixed_Id.
Mixed_Id це поле яке оновлюється SQL-запитом UPDATE та ще служить зовнішнім ключем до таблиці опису сутностей DescribeEntity.
Тобто, мені здається, досить легко реалізувати алгоритм коли, наприклад, необхідно замінити 3 та 24 рядок таблиці

UPDATE Mixed_Id SET Mixed_Id=24 WHERE Id=3;
UPDATE Mixed_Id SET Mixed_Id=3 WHERE Id=24;

плюс дрібні деталі алгоритму :)

22

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Так ви ж їх просто міняєте місцями.

23

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Це коли обміняти їх треба. А що робити, якщо користувач хоче елемент №3 вставити між елементами №№ 25 і 26? На одне пересування - 22 запити?

24

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Я не бачу ідеального рішення. Є два варіанти
1) додатковий стовпець для сортування. Простота запиту до таблиці. Проблеми з вставлянням, переміщенням елементів.

2) Просто реалізувати список в таблиці, тобто якщо є стовпець Id, то додати ще один стовпець, наприклад PreId, який буде містити Id попереднього елемента, для першого PreId буде null .  В цьому випадку все просто з вставкою, переміщенням елементів, але ускладнюється видалення і вибір списку з таблиці. Я би в цьому випадку пересортовував список після запиту вже на стороні клієнта, а не сервера.

тут просто варто вирішити, що для вас критичніше. ІМНО

Подякували: leofun011

25

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Engineer написав:

Я не бачу ідеального рішення. Є два варіанти
1) додатковий стовпець для сортування. Простота запиту до таблиці. Проблеми з вставлянням, переміщенням елементів.

2) Просто реалізувати список в таблиці, тобто якщо є стовпець Id, то додати ще один стовпець, наприклад PreId, який буде містити Id попереднього елемента, для першого PreId буде null .  В цьому випадку все просто з вставкою, переміщенням елементів, але ускладнюється видалення і вибір списку з таблиці. Я би в цьому випадку пересортовував список після запиту вже на стороні клієнта, а не сервера.

тут просто варто вирішити, що для вас критичніше. ІМНО

По варіанту 2 - напишіть приблизно, як виглядатиме запит до такої таблиці. Дякую.

26 Востаннє редагувалося Itari (03.02.2016 20:21:19)

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Вся сіль в тому, щоб при пересуванні рядка на іншу позицію,не чіпати решту записів взагалі (макс 2-3). Ви не зможете тримати ключі без змін при переміщенні (а потім сорт по ньому)

Зроби temporary таблицю, нагороди до неї значення ключового поля, а потим сортуй як заманеться. Все буде у пам'яті, та втрати ресурсив будуть маненькі. Взагалі не треба чипати джерело - хай та таблиця буде наче недоторканий довідник. А інщі тимчасові, яки не коммітяться до ЖД як контейнери для перетасувань, яки зв'язані з довідником по ключовому полю.

27

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

koala написав:

По варіанту 2 - напишіть приблизно, як виглядатиме запит до такої таблиці. Дякую.

Та звичайно буде виглядати. Я ввжаю, що такі набори даних в реальних задачах будуть мати додаткові умови по яких і буде робитися запит , наприклад перелік товарів в замовленні, список повідомлень в темі форуму....
Тому я б робив звичаний запит і впорядковував отриманий масив на стороні клієнта SQL сервера.

28

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

Кешування - погана ідея в багатокористувацьких системах; та й сама база має свій кеш в пам'яті.

29 Востаннє редагувалося Engineer (05.02.2016 21:08:43)

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

А де тут кешування ? Клієнтом БД, як правило, є веб-сайт або якийсь сервіс. В них мав би бути в коді хоча б мінімальний Data Access Level, що буде працювати з базою. І при отриманні результату запиту не буде великих затрат, щоб пересортувати отриманий список, як потрібно, та передати дальше. Бо я собі слабо уявляю де можуть бути списки на сотні та більше елементів, і де була б потреба змінювати розташування елементів в довільному порядку, а не просто сортувати по якомусь полю. Хіба що якісь дивні словники (довідники). Але їх можна пускати по першому варіанту, бо за своїм характером такі таблиці змінюються не часто.

30

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

можна створити ще одне значення у таблиці, де буде порядковий номер відображення

щоб не робити багато запитів відразу - можна написати власний обробник такої задачі ---
додати ще одну таблицю, у яку записуємо завдання - наприклад змінити порядковий номер відображення 13-го елемента на 24й
обробник періодично дістає задачу зі своєї таблиці та працює над нею

відповідно обробник повинен працювати по власній логіці - для цього конкретного прикладу - якщо ми зачіпаємо 13й елемент - отже до 13-го не чіпаємо + ми ставимо на місце 24-го -- отже після 24-го також не чіпаємо,, в результаті обробник працює з записами 13-24

цілком можливо можна ще вдосконалити логіку, потрібно подумати

31

Re: Цікава (сяк-так) задача. Довільно впорядкований список з SQL

погана ідея