Перейти к содержимому


Уникальный список на несколько таблиц

список уникальный несколько

Сообщений в теме: 4

#1 Mamau

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 27 Июнь 2014 - 15:40

Доброго времени суток, помогите пожалуйста с такой задачкой:
Надо чтобы "список" был один на все таблицы. http://prntscr.com/3x0a6w
Т.е: по легенде, есть автобус и на него продаются билеты, так вот за каждым билетом закреплено место и оно не может быть выбрано более одного раза в этом автобусе. А у меня получается я создаю подтаблицы (билеты) в них счетчик у каждой свой (все 40 мест свободно независимо от того заняты они или нет). Помогите пожалуйста сделать так чтобы при выборе в билете1 места номер 2 этого места набыло в последующих местах.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 27 Июнь 2014 - 16:13

Боюсь, стандартными средствами вы это никак не реализуете. На данный момент придется городить сложный механизм с кучей вычислений, я даже не представляю себе сразу как это оптимальнее сделать. Но, однозначно, через поле с типом "список" вы это 100% никак не сделаете, т.к. список всегда статичен. Придется либо менять его на поле связь со справочником мест, с фильтром по занятым местам (причем этот справочник нужно как-то автоматом заполнять для каждого рейса, и плюс отмечать занятые места после каждой покупки), либо каким-то образом менять сам алгоритм покупки билетов.

#3 Mamau

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 28 Июнь 2014 - 22:28

Я думал чтобы написать js скрипт который будет брать непосредственно на странице выбранные значения списка, помещать их в массив, и удалять в последующих списках выбранные числа. Таким образом не будет уже выбранных чисел. Как такой выход? И ещё 1 вопрос возможно ли наполнение таблицы за счет другой... Например, есть таблица "автобусы" там есть свойства автобуса которые записаны по ячейкам, одной такой ячейкой является поле количество мест (например 40), как в другой таблице (будем считать её промежуточной) сделать автоматически 40 полей. (как бы в цикле for($i=0; $i <40; $++){создаем поле... и тд}). В этой промежуточной таблице будут поля места в данном случае 40 , поле "занято" со значением 1 или 0 , поле "свободно" со значение 1 или 0 и поле автобус, которое также автоматом выгружается. Затем в таблице уже с билетами сделать связь с этой промежуточной, в ней ставим связующую ячейку "автобус" и делаем такой запрос типа SELECT "места" FROM "промежуточная таблица" WHERE `автобус` LIKE "поставленый тут автобус" AND "свободные места" LIKE 1 (1 - это значит свободно место). Нам выдадутся всем места выбранного автобуса которые в промежуточной таблице поставлены как свободные. При изменение таблицы билеты, нужно чтобы шел запрос обновляющий таблицу промежуточную на то что место занято и свободное место там становилось в позицую "0" а занятое в позицию "1", таким образом мы добьемся что выгружаться будут всегда нужные свободные места, ток вот как тут это сделать я хз))) надеюсь что понятно написал свои мысли =) сори что много.

Сообщение отредактировал Mamau: 28 Июнь 2014 - 22:58


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Июнь 2014 - 13:21

Я вам именно про это и писал: заполнение справочника мест в автобусе с полем "занято", которое отмечается вычислением по событию покупки билета.

#5 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 30 Июль 2014 - 06:22

У меня как раз примерно такой механизм реализован при покупке билетов. Только билеты вносятся не в ручную, а через xml файлы. Каждую минуту по крон запускается скрипт, который импортирует xml файлы в записи таблицы + редактит табличку с расписанием, при этом автоматически создавая новые рейсы(а если рейс уже есть, то добавляет в него +1 пассажир). и т. д.

По Вашей задаче предлагаю следующее. Иметь отдельную таблицу с рейсами. Обычно уникальность рейса определяют номером рейса и его датой следования. То есть в этой таблице будут следующие поля: 1. Номер рейса, 2. Дата, 3. Места. (первые два поля могут быть любые, лишь бы определить уникальность рейса).

Третье поле "Места" пусть заполнит массив со значениями 001/010/020/030/....390/400 - где будет 40 значений(40 мест в автобусе), состоящих из трех символов, первые два из которых будут показывать место, а третье значение занято оно или нет(1 - занято, 0 - нет).

Теперь самое интересное, во время добавления нового билета, мы обращаемся к записи нужного нам рейса к полю с местами, где пользуя explode выделяем массив со значениями. Далее обрабатываем каждое значение, и если место занято (третий символ 1) то номерок (первые два символа) не выводим. Ну и не забываем написать скрипт, по которому при сохранении будет заниматься место с нужным номерком в списке рейсов.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных