powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как имя таблицы в запросе выразить переменной?
25 сообщений из 80, страница 2 из 4
Как имя таблицы в запросе выразить переменной?
    #39155000
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец добрался до форума.

Таблица, содержащая сведения о каждом мероприятии (кто, где, когда и почём). Мероприятия разовые (всякие юмористы, артисты, певцы и пр.)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE events (
id_event INT UNSIGNED NOT NULL AUTO_INCREMENT,
artist TINYTEXT,
program TEXT,
min_price INT UNSIGNED,
max_price INT UNSIGNED,
id_hall INT UNSIGNED,
date DATE,
time TIME,
PRIMARY KEY (id_event),
FOREIGN KEY (id_hall) REFERENCES halls(id_hall)
) ENGINE=MyISAM;


Каждой записи таблицы events соответствует своя пара таблиц places и prices_table. Корректнее говорить о таблицах с именами формата placesXYZ и prices_tableXYZ, где XYZ – это идентификатор соответствующей записи таблицы events. Отсюда и идёт проблема передачи имени таблицы в качестве переменной в параметр запроса.

Таблица купленных или не купленных мест соответствующего зрительного зала на конкретное мероприятие из events. Данная таблица строится в соответствии с файлом структуры зрительного зала halls.file. По id определяется ряд и место, исходя из структуры в halls.file. Каждой строке соответствует место в зрительном зале. Сделано так для того, чтобы использовать возможность построчной блокировке при транзакции (InnoDB).
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
vacant BOOL,
id_pr INT UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (id_pr) REFERENCES prices_table(id_pr)
) ENGINE=InnoDB;


Таблица цен на места зрительного зала конкретного мероприятия. Разные места в зале имеют разную цену. Для визуализации этого различия добавлен цвет. Цвет трехкомпонентен для удобства его инвертации.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE prices_table (
id_pr INT UNSIGNED NOT NULL AUTO_INCREMENT,
price_value INT UNSIGNED,
red TINYINT UNSIGNED,
green TINYINT UNSIGNED,
blue TINYINT UNSIGNED,
PRIMARY KEY (id_pr)
) ENGINE=MyISAM;


Постоянная таблица. Сюда загоняются имеющиеся зрительные залы. Структура каждого зала содержится в файле с именем file. Все залы разумеется разные.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE halls (
id_hall INT UNSIGNED NOT NULL AUTO_INCREMENT,
name TINYTEXT,
region TINYTEXT,
city TINYTEXT,
street TINYTEXT,
house CHAR(8),
file TINYTEXT,
PRIMARY KEY (id_hall)
) ENGINE=InnoDB;


В целом пожалуй всё. Если что-то не хватает, по ходу проясним.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155008
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok,

ничего нового ты тут не написал.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155024
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот скажи пожалуйста,

вот таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
vacant BOOL,
id_pr INT UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (id_pr) REFERENCES prices_table(id_pr)
) ENGINE=InnoDB;



по сути всё просто -- id, занято или нет, и цена.
А вот представь такую задачу -- нужно выдать на заданное событие все свободные места для выбора пользователя.
Ты ЧТО пользователю будешь показывать, чтобы он что-то выбрал ? ID ?

Вот и получается, что проблема даже не в "Как имя таблицы в запросе выразить переменной", а в том, что у тебя вообще нет БД.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155026
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У всех полей таблиц названия говорящие. Чего ещё здесь не хватает для того, чтобы понять как избежать такого неловкого применения PREPARE STATEMENT?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155030
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokПо id определяется ряд и место, исходя из структуры в halls.file.
Вся структура зрительного зала с расположением мест отображается на странице браузера (вид зала сверху). Кассир продающий места видит занятые, не занятые места, за 1000руб, за 3коп. ... fedushokДля визуализации этого различия добавлен цвет.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155031
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokfedushokПо id определяется ряд и место, исходя из структуры в halls.file.
Вся структура зрительного зала с расположением мест отображается на странице браузера (вид зала сверху). Кассир продающий места видит занятые, не занятые места, за 1000руб, за 3коп. ... fedushokДля визуализации этого различия добавлен цвет.

Обычно когда ты смотришь на билет, там написано:
"Партер, левая сторона, 5-ый ряд, место 23".
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155039
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и сделано. Когда кассир выбирает место он видит № ряда, № места и цену. Работа с id скрыта от кассира.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155069
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прочитай что написал MasterZivMasterZivВот скажи пожалуйста,

вот таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
vacant BOOL,
id_pr INT UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (id_pr) REFERENCES prices_table(id_pr)
) ENGINE=InnoDB;



по сути всё просто -- id, занято или нет, и цена.
А вот представь такую задачу -- нужно выдать на заданное событие все свободные места для выбора пользователя.
Ты ЧТО пользователю будешь показывать, чтобы он что-то выбрал ? ID ?

Вот и получается, что проблема даже не в "Как имя таблицы в запросе выразить переменной", а в том, что у тебя вообще нет БД.
поле со ссылкой на справочник цен отсюда можно убрать. Цена ("трехцветная" а может и больше) будет привязана к событию (я так вижу)
Вакант можно убрать, сам факт наличия записи в этой таблице будет признаком занятости
Иначе тебе придется для каждого события "заполнять" таблицу зала полностью
КАРТИНКУ отбрось, это уже графическое отображение того, что будет храниться в базе.
поля ред грин блю можно убрать оставить одно - колор в ТАБЛИЦЕ places, это класс места (как я вижу), в нем и будет храниться значение ред грин блу
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155080
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вдаваясь в рассуждения по перечисленным предложениям, возвращаю нас к прежнему вопросу.
В качестве параметра процедуре я передаю имя таблицы зрительного зала с местами (placesXYZ), а не таблицы цен. Именно это вызывает возникновение кода, написанного не в правилах хорошего тона программирования. Предлагаю двигаться именно в этом направлении. А если цены как-то на это повлияют, то как?

Кстати никаких картинок в базе нет. Отбрасывать нечего. Это screenshot браузера открытого на странице зрительного зала, для демонстрации того, что кассир работает не с id, а номерами мест и рядов.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155097
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokКстати никаких картинок в базе нет. Отбрасывать нечего. Это screenshot браузера открытого на странице зрительного зала, для демонстрации того, что кассир работает не с id, а номерами мест и рядов.

Ты его на основе чего рисовать-то будешь, этот скриншот ?

Ладно, всё, эт клиника, я дальше не участвую ...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155099
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok,

про MyIsam забыть все в InnoDB...
где номер места и ряда.....

вот есть ОПИСАТЕЛЬНАЯ таблица заЛОВ
таб/залов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE halls (
id_hall INT UNSIGNED NOT NULL AUTO_INCREMENT,
name TINYTEXT,
region TINYTEXT,
city TINYTEXT,
street TINYTEXT,
house CHAR(8),
file TINYTEXT,
PRIMARY KEY (id_hall)
) ENGINE=InnoDB;


теперь таб.МестаВзалах
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
таблица один раз заполняется для каждого зала, это СТРУКТУРА ЗАЛА
CREATE TABLE places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
FROM_HALL  INT UNSIGNED NOT NULL,
mesto int,
ryad int,
color int, /*тип интежер просто так, это качество места*/
PRIMARY KEY (id),
FOREIGN KEY (FROM_HALL) REFERENCES halls(id_hall)
) ENGINE=InnoDB;

эта связь понятна? у каждой записи таблицы мест есть "ссылка на зал, к которому они относятся"
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155100
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok,

с этим разберитесь, дальше видно будет
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155103
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя передаю имя таблицы зрительного зала с местами (placesXYZ),она будет у вас одна, что избавит от передачи куда то...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155127
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В предлагаемом варианте отсутствует связь самого мероприятия и (как я понимаю) места в зрительном зале. Как мыслится эта связь?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155140
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как быть с ценой? Ведь за каждым местом (а не за мероприятием) должна быть закреплена цена. Причем у каждого мероприятия может быть разная "номенклатура" цен, которая должна быть рассредоточена по местам в зале?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155144
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно можно добавить ссылку на мероприятие в виде еще одного поля в таблице мест.
Но как разрастётся таблица каждого МестаВзалах скажем через определённое количество мероприятий? Поиск в такой таблице из-за её большого объёма будет затруднен. Не теряем ли мы большее приобретая меньшее?

Еще один момент.
Идентифицировать положение места в зрительном зале по ряду и номеру места затруднительно. Зрительные залы не всегда прямоугольной формы (ряды могут иметь "не нормированное количество мест" как первый и второй ряд на картинке), к которой можно пристыковать систему отсчёта и оперировать рядом и местом. Я выполняю идентификацию положения места по его id через файл структуры зала. Получается каждый раз для того чтобы выяснить положение места необходимо будет каждый раз обращаться к файлу структуры зала в таблице "ОПИСАТЕЛЬНАЯ таблица заЛОВ". Это тоже накладно.
Сейчас благодаря полной комплектности мест сразу устанавливается положение места в зале, связь ID места и его ряда и места (и обратная связь) и его цены.
Когда возникнет необходимость добавлять только занятые места эту связь придётся устанавливать каждый раз при добавлении (длинным путём), вместо того, чтобы сделать это один раз.

Возможно ваше предложение как-то решает эти вопросы?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155147
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivfedushokКстати никаких картинок в базе нет. Отбрасывать нечего. Это screenshot браузера открытого на странице зрительного зала, для демонстрации того, что кассир работает не с id, а номерами мест и рядов.

Ты его на основе чего рисовать-то будешь, этот скриншот ?

Ладно, всё, эт клиника, я дальше не участвую ...
1. То что представлено на screenshot-те уже умеет "рисоваться".
2. Это будет уже третий раз когда я повторю одно и тоже - структура зала берётся из соответствующего текстового файла.
3. С клиникой - это немного перебор. Скорее всего человек, который делает заявление, а потом оказывается не в состоянии его обосновать не является клиентом клиники. Уже две страницы исписано, а так и не подобрались к вопросу об оптимизации структуры БД. Полагаю это показатель отсутствия ответа на мой вопрос. Критерием не оптимальности был назначен факт использования PREPARE STATEMENT. MasterZiv говорит о чём угодно, только не об этом. Какая тут структура? MasterZiv не смог подняться выше крайне непоследовательных рассуждений об излишестве отдельных полей, сопровождая это все банальными оскорблениями.
Здесь более всего подойдёт не клиника, а блондинка в критические дни.

При наличии самокритичности MasterZiv должен был бы поблагодарить меня за такую трату времени (до последнего надеялся что с пользой), чтобы показать ему, что прежде чем открыть рот нужно подумать головой и никогда не ставить телегу вперёд лошади.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155173
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokВ предлагаемом варианте отсутствует связь самого мероприятия и (как я понимаю) места в зрительном зале. Как мыслится эта связь?


ну добавь связь, в чем проблема? в event добавить hall_id.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155174
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. С клиникой - это немного перебор.

да нет, в самый раз.



Уже две страницы исписано, а так и не подобрались к вопросу об оптимизации структуры БД.


ага, потому что бы так и не врубился, что у тебя никакой структуры и никакой БД просто нет.
тебе объясняют, объясняют, все об стену горох,

там у тебя должна был бд о примерно 30 таблицах. у тебя ЧЕТЫРЕ!!! из которой одну можно выкинуть.


вот иди, и пока тупо 30 таблиц не нарисуешь, не возвращайся.


Вообще, у меня есть догадка, что может это вообще студент сессию зимнюю сдает так оригинально...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155176
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokВ предлагаемом варианте отсутствует связь самого мероприятия и (как я понимаю) места в зрительном зале. Как мыслится эта связь?еще раз (я писал это выше)
нужна таблица регистрации продажи билета на мероприятие. Это главная таблица... Записи в ней хранятся сколь угодно долго, это история для получения отчетов, скажем для бухгалтерии за месяц за год и тд и тп
Объясняю в общих словах
Она "свяжет"
1вариант
ид мероприятия
ид кинотеатра
ид места-ряда
т.е. кассир выбрала мероприятие, кинотеатр, место в зале и клацнула "продать" при этом добавилась запись в этой таблице ПРОДАЖИ
ЭТО ВЕСЬ механизм регистрации продажи билета.
или
2. вариант
если у мероприятия будет форейжн на ид Кинотеатра (при таком проектировании если мероприятие проходит строго в одном кинотеатре, можно при заполнении нового мероприятия указать кинотеатр)
то
выбирает мероприятие (в нем уже будет поле ид_кинотеатр)
клацает на место в зале для этого кинотеатра и продает.
это и есть задача проектирования базы - как правильно определить и описать "сущности"
как их связать, чтобы было удобно с базой работать, т.е. что-то регистрировать, делать отчеты и т.д.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155178
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

это и есть какое то задание ) гугл дает много ссылок
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155181
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо как разрастётся таблица каждого МестаВзалах скажем через определённое количество мероприятий?это Жесткая фиксированная таблица с имеющимися местами в ЗАЛЕ(-АХ), да и для базы данных миллион не помеха
к примеру 2 ряда кинотеатра с признаком "пижонистости", красные для богатых на первом ряду, синие на втором для бедных
idМестассылкаКинотеатр ряд место ранг1 ктОктябрь 1 1 красн2 ктОктябрь 1 2 красн3 ктОктябрь 1 3 красн4 ктОктябрь 1 4 красн5 ктОктябрь 1 5 красн6 ктОктябрь 2 6 син7 ктОктябрь 2 7 син8 ктОктябрь 2 8 син9 ктОктябрь 2 9 син
в каком виде у вас "ФАЙЛ" структуры зала? это тоже должна быть таблица и она важна, об этом и идет речь. В БД нет файлов есть таблицы, это и есть опорная таблица...
О цене пока речи не ведется
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155225
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokИ как быть с ценой? Ведь за каждым местом (а не за мероприятием) должна быть закреплена цена. Причем у каждого мероприятия может быть разная "номенклатура" цен, которая должна быть рассредоточена по местам в зале?вот, это важный момент. Но с этим можно заняться и позже.
1. На концерт Киркорова цена будет выше, чем на БГ. Т.е. привязка цены должна быть к мероприятию
2. Ценность места, т.е. цвет, не зависит от мероприятия (как я понимаю), она заранее определена в зале. Как у вас на картинке, цвета в зале заранее определены и верны для каждого мероприятия. Т.е. это свойство объекта можно указать в его сущности, в таблице places/ (поле color или rang, kategoria)
Это к размышлению....


Все же для начала отработайте базу с безценовой регистрацией покупки:
1. Кассир выбирает мероприятие, (в "анонсе" мероприятия уже будет указан "зал", судя по вашей таблице events это так), выбирает место в зале, регистрируется покупка билета. В таблице регистрации покупки уникальный ключ по вашей схеме (ид_мероприятие, ид места), чем исключается повторная продажа билета на тот же "сеанс".
2. Отработайте запрос обновления свободных мест в зале на сеанс (с учетом уже проданных)

и как выше указывал MasterZiv - уберите min_ и max_price цены из events (цены потом будут вынесены в отдельную таблицу с привязкой к мероприятию и "классу" места в зале, это мое видение, но это пока опускаем)
если у вас это курсовая, то отбросьте всякие "брони" "фигони" и т.д. сделайте рабочий железный скелет, чем больше вы будете накручивать, тем больше введете себя в тупичок.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155295
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
ну как бы структура зала без указания его частей это, мягко говоря, не очень комильфо
Потому надо обязательно добавить табличку zones_hall и id части добавить в таблицу мест в зале
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create table halls (
id_hall INT UNSIGNED NOT NULL AUTO_INCREMENT,
name TINYTEXT,
region TINYTEXT,
city TINYTEXT,
street TINYTEXT,
house CHAR(8),
file TINYTEXT,
PRIMARY KEY (id_hall)
);

create table zones_hall
id_zone  INT UNSIGNED NOT NULL AUTO_INCREMENT,
name tinyInt
PRIMARY KEY (id_zone)
);

create table places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
id_HALL INT UNSIGNED NOT NULL,
id_zone int
mesto tinytext,
ryad tinytext
PRIMARY KEY (id),
FOREIGN KEY (id_HALL) REFERENCES halls(id_hall)
FOREIGN KEY (id_zone) REFERENCES zones_hall(id_zone)
);



Также смею заметить, что номера ряда и места лучше сделать не числами, а текстовыми. Ибо, не факт, что нет в природе зала, в котором ряды и места могут обозначаться буквами (или даже сочетаниями букв). Тем более, что с этими данными нет большой надобности производить какие-то математические действия (ну разве что найти последний ряд, например, да и то это надо для каких-то программных обработок, которые пока что никому не нужны), чтобы держать их значения в цифрах.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155303
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а мероприятия разбить на две таблицы: событие и сеанс события
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table events (
id_event INT UNSIGNED NOT NULL AUTO_INCREMENT,
artist TINYTEXT,
program TEXT,
id_hall INT UNSIGNED
);

Create table seanses
id_seans
id_event
date DATE,
time TIME
);




Тогда уж без проблем можно привязать места к сеансам с указанием цены и признаком занятости
Код: sql
1.
2.
3.
4.
5.
create Tables seans_plases
id_seans
id_place
id_price
vacant


Причем, как видно, цену лучше указывать не числом, а использовать идентификатор классификатора цен:
Код: sql
1.
2.
3.
4.
create tables prices
id_price
nominal
color


то есть видно, что для одинаковой цены можно сделать разные цвета в зависимости от мероприятия (чтобы логичнее смотрелась градация дешёвые-дорогие билеты, так как 1000 рублей на концерт Киркорова и 1000 рублей на спектакль театрального коллектива ДК Родина это, мне кажется, разные ценовые категории.
...
Рейтинг: 0 / 0
25 сообщений из 80, страница 2 из 4
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как имя таблицы в запросе выразить переменной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]