Конференция "Базы" » Выбор записей [D7, fb 2]
 
  • Mike Kouzmine (19.08.09 11:49) [0]
    Суть:
    Имеется таблица с номенклатурой товаров. Необходимо сделать "наглядную" выборку из этого списка.
    "Наглядная" - это два списка:
    1 общий с польз. условиями выборки минус уже выбранные позиции
    2 выбранные позиции
    Думаю так: два дбгрида, начальные селекты
    Для 1 -
    select * FROM NOMETKLATURA
    where (польз. фильтр)
    Для 2
    select * FROM NOMETKLATURA
    where nom_id in (null)
    (nom_id  входит в первичный индекс)
    При выбре селекты меняются
    1 - select * FROM NOMETKLATURA
    where (польз. фильтр) and nom_id not in (список выбранных)
    2 - select * FROM NOMETKLATURA
    where nom_id in (список выбранных)
    Вроде должно работать.
    Есть ли другие способы? Попроще.
  • Медвежонок Пятачок © (19.08.09 11:55) [1]
    у меня подобное делается средствами грида.
    то есть изначально юзер видит датасет нефильтрованный, или с фильтрм дизайнт-тайма.

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

    операции эти не разрушающие, можно возвращаться туда-обратно много раз
  • Sergey13 © (19.08.09 12:00) [2]
    > [0] Mike Kouzmine   (19.08.09 11:49)

    Ну а если второй список организовать на клиенте в таблицу в памяти? И просто копировать туда записи из первого. Что предполагается делать с выбранными записями?
    Я такое делал для оформления документа одной транзакцией, а в память выбирал для подсчета промежуточных результатов и безболезненного отката. Типа клиент говорит "хочу подешевле" и можно какую то позицию поменять в окончательном заказе без засорения БД.
  • Mike Kouzmine (19.08.09 12:02) [3]
    Первое, что хотел сделать - это так как у вас, но, подумав (пока делаю для себя), решил, что для человека, который будет это делать, нагляднее будет вариант с двумя гридами. Принцип-то тот же. Визуализация другая. Вероятно.
  • Mike Kouzmine (19.08.09 12:05) [4]
    Sergey13 ©   (19.08.09 12:00) [2] Потом выбранные будут
    UPDATE NOMETKLATURA
    SET TNVED_ID = :T
    WHERE NOM_ID IN (список)
  • Anatoly Podgoretsky © (19.08.09 12:06) [5]
    > Mike Kouzmine  (19.08.2009 11:49:00)  [0]

    Вроде бы и этот не сложный.
  • Anatoly Podgoretsky © (19.08.09 12:06) [6]
    > Медвежонок Пятачок  (19.08.2009 11:55:01)  [1]

    Для списков полностью помещающихся на экране это подходит, но для длинных списков это мучение.
  • Mike Kouzmine (19.08.09 12:08) [7]
    Anatoly Podgoretsky ©   (19.08.09 12:06) [5] Я не говорю, что сложный. Это то, что пришло в голову сразу.
  • Mike Kouzmine (19.08.09 12:09) [8]
    Anatoly Podgoretsky ©   (19.08.09 12:06) [6] Записей 10000, не более. С условиями штук 50.
  • Mike Kouzmine (19.08.09 12:10) [9]
    Anatoly Podgoretsky ©   (19.08.09 12:06) [6] Я спрашивал попроще для пользователя.
  • Медвежонок Пятачок © (19.08.09 12:22) [10]
    но для длинных списков это мучение.

    с двумя гридами будет тоже самое мучение.
    это вопрос дизайна самой формы в которой пока нет никаких пользовательских отборов
  • Anatoly Podgoretsky © (19.08.09 13:31) [11]
    > Mike Kouzmine  (19.08.2009 12:10:09)  [9]

    Мне кажется первый вариант проще для пользователя, во первых он сразу видит список отобраных записей, а во вторых нет возможности сделать дубль.
  • Anatoly Podgoretsky © (19.08.09 13:32) [12]
    > Медвежонок Пятачок  (19.08.2009 12:22:10)  [10]

    Не будет мучения, второй список короткий, а в первом запись убирается и можно первый список крутить как угодно не боясь снять отметку.
  • Sergey13 © (19.08.09 14:41) [13]
    > [4] Mike Kouzmine   (19.08.09 12:05)

    Если (список) будет длинным (типа юзер "Выбрал ФСЁ") теоретически можно налететь на превыешние длины запроса и/или на плохую производительность запроса.
    Как вариант можно попробовать сделать псевдо-временную таблицу, куда писать идентификаторы записей с оригинальным признаком, например имени пользователя. Перед заполнением ее очищать от своих старых записей.
  • Mike Kouzmine (19.08.09 14:50) [14]
    Anatoly Podgoretsky ©   (19.08.09 13:31) [11]
    Уже почти доделал
  • MsGuns © (20.08.09 09:11) [15]
    Если это номенклатура, то там должны быть и группы (подгруппы). Отображение списка деревом много упростит пользователю жизнь. Хотя, конечно, можно и предусмотреть "сплошной" режим.
    В остальном делал бы как в Sergey13 ©   (19.08.09 12:00) [2] Например через обычный стрингрид .
  • Mike Kouzmine (20.08.09 10:16) [16]
    Sergey13 ©   (19.08.09 14:41) [13] Пробовал на 800 - отрабатывает менее чем за секунду.
    Превышение возможно - поставлю ограничитель
  • Mike Kouzmine (20.08.09 10:20) [17]
    MsGuns ©   (20.08.09 09:11) [15] Это присутствует в качестве условий отбора - группа и строка для отбора из поля наименования
 
Конференция "Базы" » Выбор записей [D7, fb 2]
Есть новые Нет новых   [134473   +32][b:0][p:0.001]