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

Пытаюсь сделать следующую процедуру
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE SetSeatStatus(status TINYINT UNSIGNED, id_place INT UNSIGNED, tableName TINYTEXT, OUT SeatStatus TINYINT UNSIGNED) 
BEGIN
START TRANSACTION;
SET SeatStatus:=(SELECT p FROM tableName WHERE id=id_place FOR UPDATE);
IF (SeatStatus<>status) THEN
UPDATE t SET p=status WHERE id=id_place;
END IF;
COMMIT;
END


В операторе SELECT вместо имени таблицы стоит переменная, которая содержит имя таблицы (заранее имя таблицы не известна). Однако переменная tableName воспринимается как имя таблицы и MySQL говорит, что такой таблицы не знает. Как ни пробовал ни пробовал ничего не получается. Что посоветуете?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153595
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153621
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю за отклик.
Получилось следующее.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DELIMITER //
CREATE PROCEDURE SetSeatStatus(status TINYINT UNSIGNED, id_place INT UNSIGNED, tableName TINYTEXT, OUT SeatStatus TINYINT UNSIGNED) 
BEGIN
START TRANSACTION;
SET @oper:=CONCAT(“SET SeatStatus:=(SELECT p FROM ”,tableName,”  WHERE id=id_place FOR UPDATE);”);
PREPARE operand FROM @oper;
EXECUTE operand;
DEALLOCATE PREPARE operand;
IF (SeatStatus<>status) THEN
SET @oper:=CONCAT(“UPDATE ”,tableName,” SET p=status WHERE id=id_place;”);
PREPARE operand FROM @oper;
EXECUTE operand;
DEALLOCATE PREPARE operand;
END IF;
COMMIT;
END
//
DELIMITER ;


Но теперь MySQL не признаёт выходную переменную SeatStatus. При вызове процедуры пишет - ERROR 1193 (HY000): Unknown system variable 'SeatStatus'.
Как теперь это обойти?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153649
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok. Как ни пробовал ни пробовал ничего не получается. Что посоветуете?

Про prepared statement тебе уже сказали, но вообще если тебе такое нужно, то у тебя что-то совсем не так с подходом к проектированию базы данных. не должно такое быть необходимо в нормальной бд.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153657
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что конкретно не так с проектированием БД?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153666
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришлось переделать следующим образом.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DELIMITER //
CREATE PROCEDURE SetSeatStatus(status TINYINT UNSIGNED, id_place INT UNSIGNED) 
BEGIN
START TRANSACTION;
SET @oper:=CONCAT(“SET @SeatStatus:=(SELECT p FROM  ”,@tableName,” WHERE id=”,id_place,” FOR UPDATE);”);
PREPARE operand FROM @oper;
EXECUTE operand;
DEALLOCATE PREPARE operand;
IF (@SeatStatus<>status) THEN
SET @oper:=CONCAT(“UPDATE ”,@tableName,” SET p=”,status,” WHERE id=”,id_place,”;”);
PREPARE operand FROM @oper;
EXECUTE operand;
DEALLOCATE PREPARE operand;
END IF;
COMMIT;
END
//
DELIMITER ;


Но для того, чтобы вызвать процедуру необходимо сначала определить глобальные переменные, которые используются в процедуре.
Код: sql
1.
2.
SET @SeatStatus:=2,@tableName=’t’;
CALL SetSeatStatus(0,4);


Так работает. Оценивая на такую конструкцию как программист, я понимаю что что-то не так. Это моя первая база. Может поможите советом по исправлению "что-то не так"?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153692
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл в следующем (дополню MasterZiv)

На простых вещах (абстрагируемся от вашей темы, хотя вы ее и не показали)

1. у вас есть объект ТОВАРЫ, эта "сущность" должна быть описана одной таблицей с полем ТИП (холодильник, микроволновка и т.д)
2. у вас же под каждый тип своя таблица. Это в корне не правильно.

При подходе 2 вам придется стряпать Prepare statement для каждого товара
При подходе 1 - достаточно SELECT * FROM Tovar WHERE tovar_type="холодильник"
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153698
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправляюсь.
Мне необходимо сделать электронную кассу для нескольких кассиров для продажи билетов на различные мероприятия. Разумеется необходима одна база, с которой они все будут работать.
Есть одна таблица (MyISAM), которая содержит первичные данные по мероприятию: кто, где, с чем, и т.д. и в том числе название таблицы концертного зала. Получается, что одной записи таблицы с первичными данными о мероприятии соответствует одна вновь создаваемая таблица концертного зала. Концертных залов несколько, поэтому по своей структуре таблицы залов разнятся, так как похожих залов нет. Таблица концертного зала (InnoDB) содержит номер места, признак занятости и цену. То есть одна строка - одно место. Тип InnoDB + одно место сделано одной строкой для того, чтобы при транзакции были блокированы только те места, с которыми в данный момент времени работает кассир.
Как-то так...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153700
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как, вы считаете это надо изменить, чтобы "вогнать" БД с стандартные рамки, не упуская возможности однострочной ("одноместовой") блокировки при транзакции?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153706
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
две таблицы
первая продажи
вторая конц зал (места) с полем (концертзал)
все
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153709
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok....кто, где, с чем, и т.д. и в том числе название таблицы концертного зала ...Концертных залов несколько, поэтому по своей структуре таблицы залов разнятся, так как похожих залов нет. - общая таблица Места в ззалах с полем Наим зала
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153712
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushokЧто конкретно не так с проектированием БД?

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

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


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

нет мне надо не это, а Create table для всех таблиц.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39153752
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
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;

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;

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;

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=MyISAM;
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39154034
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это чё за шизонутый бред ?
Эт идиотизм какой-то, я тут нихрена не понимаю.

во-первых прежде всего в MyISAV нет FOREIGN KEY, он их просто не поддерживает.
Так что либо FOREIGN KEY + Inno, либо MyISAM.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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;

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=MyISAM;



Эт ещё более -- менее. много дебилизма, конечно, но ничего.
Код: plaintext
artist -- должен быть справочник.

Код: plaintext
1.
2.
min_price INT UNSIGNED,
max_price INT UNSIGNED,--  на фиг не нужны.


Код: plaintext
1.
2.
date DATE,
time TIME,

-- у тебя же не один день и час будет спектакль или что там..
А несколько дней и несколько спектаклей/шоу в день. Нужно делать отдельно
расписание.



А вот дальше идёт полный идиотизм


Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE prices_table (
id_pr INT UNSIGNED NOT NULL AUTO_INCREMENT,
price_value INT UNSIGNED,
-- red green blue --> color
color INT,
PRIMARY KEY (id_pr)
) ENGINE=MyISAM;



Получается таблица из двух полей -- ID и ЦВЕТ.
На кой такая вообще нужна? Пиши сразу ЦВЕТ вместо ссылки на ЦВЕТ.
Если бы это был бы список городов, список стран -- понятно. Но это --
атомарное самодостаточное значение. Ни на хрен не нужен словарь.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE places (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
vacant BOOL,
--id_pr INT UNSIGNED,
COLOR INT NOT NULL,
PRIMARY KEY (id),
-- FOREIGN KEY (id_pr) REFERENCES prices_table(id_pr)
) ENGINE=InnoDB;



Место, признак занятости и цвет. ОК, и как это всё со спектаклями и залами связано ?
Не говоря уже о том, что место там обычно имеет РЯД, НОМЕР МЕСТА, и что-то типа того.
Название хотя бы места должно быть ?

Так что извини, правильной структуры тебе не будет.


В общем, вместо того, чтобы проектировать БД нормально, ты пьёшь неумеренно пиво и мучаешь людей идиотскими
вопросами из цикла "как сделать то, что никогда делать вообще не надо".
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39154155
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрев данные "замечания", да еще сделанные в такой манере, делаю вывод - помощи не дождаться. Все "критика" свелась к не структуре БД, а к тому что "это поле лишнее и это тоже". До конца не понимая что нужно, делать такие выводы, мягко говоря, преждевременно. Если не хватает информации - спроси, из моих сообщений очевидно, что я готов предоставить что угодно. Самое главное, что всё сказанное не то чтобы явно не разрешает, но и не приближает к ответу на поставленный вопрос - "Что не так в структуре БД?".
Итак, теперь об идиотизме и пр.
MasterZivПро prepared statement тебе уже сказали, но вообще если тебе такое нужно, то у тебя что-то совсем не так с подходом к проектированию базы данных. не должно такое быть необходимо в нормальной бд.
Если берешься писать сообщение выражай свои мысли ясно, а не загадками. Любая мысль должна быть логически структурирована и закончена (анализ, критика, вывод, рекомендация) - это означает что в конце должен быть вывод, являющийся руководством к действию. Интересно, сколько лет моему советчику, если приходится ему это писать?
MasterZivструктура неправильная.
Ну наконец-то удалось дотянуть мысль моего "советчика" практически до середины её выражения!
MasterZivну вот это и есть ошибки в проектировании бд.
не должно быть такого.
Чего "такого"? Опять загадки...
MasterZivдай мне структуру твоей бд, тогда я смогу сказать, как изменить.
Здесь выясняется, что критика была сделана без анализа. Ведь для анализа необходимы исходные данные, которые мой "советчик" запросил практически в самом конце.
MasterZivнет мне надо не это, а Create table для всех таблиц.
Непонятно как представленная схема не даёт представление о структуре БД ...
MasterZivЭто чё за шизонутый бред ? ...
И в конечном итоге, чтобы получить совет я трачу время - рисую схемы и пр. Для чего? Для того, чтобы стать свидетелем того, как один индивид встал на четвереньки и просто начал гавкать. Если я захочу зоопарк, я пойду в зоопарк. Однако это форум ...

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

Да не в манере дело, и не в критике.
А в отсутствии структуры БД как таковой вообще.

Поясни ДЕТАЛЬНО твои create table, чтобы было что-то понятно.

Я тебе детально расписал, что у тебя непонятно. Вот поясни, где у меня вопросы.

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


Наоборот, там всё очень ясно и близко к ответу.
Фактически у тебя НЕТ никакой структуры БД вообще.


Дальше цитаты не буду оформлять, извините...


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


Я выражал свою мысль предельно ясно. Ещё раз: Если тебе нужно подтавлять в производственной БД имя таблицы в запрос
в виде данных, у тебя неверно спроектирована база, её надо переделывать.
У тебя не должно быть ни переменного числа таблиц в БД, ни "массивов таблиц", закодированных в их именах.

Здесь выясняется, что критика была сделана без анализа. Ведь для анализа необходимы исходные данные, которые мой "советчик" запросил практически в самом конце.


Чтобы сделать анализ, нужно понимать что-то. Твоя структура абсолютно непонятна, в ней нет мыслей.


Непонятно как представленная схема не даёт представление о структуре БД ...

Это и есть структура БД. Она даёт о структуре БД непосредственное представление.

MasterZivЭто чё за шизонутый бред ? ...
И в конечном итоге, чтобы получить совет я трачу время - рисую схемы и пр. Для чего? Для того, чтобы стать свидетелем того, как один индивид встал на четвереньки и просто начал гавкать. Если я захочу зоопарк, я пойду в зоопарк. Однако это форум ...

Да ладно ты, ну, поругался я немного, ничего страшного.
Но схема-то действительно бред сумашедшего.


Благодарю Alex_Ustinov за совет. Я его использовал - все работает.

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

препаре статемент это костыль ... дальше у вас будут проблемы

реально что нам нужно - Регистрация покупки билета с местом-рядом в кинотеатр таким то кассиром
таблицы
0. Кассиры KS
1. Мероприятия MP
2. Кинотеатры KT
---- Нужна опорная жесткая таблица место-ряд для каждого кинотеатра (одна на все) (id / id_kt / mesto / ryad ) MST
3. Таблица регистрации покупки билета на мероприятие в КиноТеатре REG_MP_KT
при покупке INSERT idKS, idMP, idKT, idMST.....
все, записали, что билет куплен (число где-то присоорудите)
по моему очень просто
из такой структуры вы найдете несложными запросами Свободные места и все остальное
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39154227
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

ну надо сказать что на самом деле предметная область достаточно сложна, потому что структура залов очень разная, и её сложно формализовать, мы такое делали, очень сложная предметка.

но сложна она не с точки зрения бд, а просто анализа. а по бд там все правильно.

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

конечно таблиц может быть по необходимости гораздо больше,
просто более менее простой и правильный костячок не помешал бы
...остальное можно прикрутить по ходу.
Насчет залов - да. структура может быть сложная - галерки...фигорки и т.д. но можно тоже закодировать, на клиенте для визуализации распарсить...
Схема то простая, как покупка ж/д билета на одноименном сайте....... есть поезд-вагон с местами, покупаем билетик )
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #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
Как имя таблицы в запросе выразить переменной?
    #39155359
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Fontaine,

не нужно все это...
если цвета топик стартер указывал как поля, это непонимание что такое таблица.
там нужен минимализм для начала.
Спора о структуре базы даже не ведется.
Шаги - 1. понять 2. Осознать....и все остальное
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155547
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovMr.Fontaine,

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

Это вот о чём? Про то, что у авторра темы цвет записывается в три поля? Где тут непонимание таблиц? Какая разница как будет храниться цвет, в трёх полях FF, FF, FF или в одном FFFFFF? По-моему тут разница просто в обработке значений этих полей. Конечно при варианте трёх полей надо будет их соединять при любом запросе, но что в этом криминального? TINYINT UNSIGNED как раз даёт значения от 0 до 255.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155619
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)))
с вами еще поспорить?
это свойство сущности , описывается одним полем, зачем плодить 3 поля для одного свойства? Задумайтесь....
Каким вы запросом соберете к примеру общее количество красных кресел? а синих?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155621
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
))))
а как вы будете хоть примерно соединять категорию места с ценой? если green=green то одно а если blue=blue то другое?
а если в зале появится еще одна категория, вы будете DDL корячить???
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155624
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче суть этого поля - ценовая категория, там должны быть циферки 1,2,3,4,5,6... сколько угодно
для клиента (в PHP допустим) раскрашивайте как угодно
все, хорош, поигрались и хватит... задачка с PHP-задачника
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155908
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Посмотрел ваши сообщения, но ухватить идею в целом у меня, к сожалению, не получилось. Можно тоже самое или в виде схемы которую я нарисовал на картинке, или в виде соответствующей последовательности CREATE TABLE с промежуточными комментариями?
Заранее благодарен.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39155917
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я не студент. Просто в прошлом году решил освоить web-программирование, и как раз подвернулся заказ. Не хочу упустить такую удачу. Надеюсь вы меня поймёте...
У меня есть опыт в программировании, но только не в проектировании БД.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156004
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedushok,

только по мере возможности. В общих чертах. В проектировании БД много частных вещей.
У меня есть основная работа, поэтому времени немного.

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

только по мере возможности. В общих чертах. В проектировании БД много частных вещей.
У меня есть основная работа, поэтому времени немного.
Без вопросов. Я буду рад любой помощи.
Alex_UstinovВыложите то что вы называете файлом зала. И почему он именно такой (он был приложен к заказу?)
Код: html
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Типы мест
1 сидение
2 пустое место 
3 обозначение ряда 
4 полупустое место
5 пустой ряд

Формат пары:
Кол-во_сидений
Тип_места

Формат ряда:
Кол-во_записей (одна пара – две штуки)
Пара1
Пара2
Пара3 …

Формат массива рядов:
Кол-во_записей_рядов
Ряд1
Ряд2
Ряд3 …

Формат зала:
Массив рядов
Кол-во_записей (одна пара – одна штука)
Индекс_ряда_№1 (нумерация с нуля по мере их перечисления в массиве)
Кол-во_рядов_№1
Индекс_ряда_№2 
Кол-во_рядов_№2
Индекс_ряда_№3 
Кол-во_рядов_№3
Индекс_ряда_№2 
Кол-во_рядов_№2
Индекс_ряда_№3 
Кол-во_рядов_№3
…


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


Во, пошли мысли!
А чего раньше-то, где они были?
И где же всё вышеперечисленное в БД и её структуре?

А зал бы я делал так:
Таблица "Зал"
Таблица "Элемент зала" с иерархией элементов зала (начинается от зала). (возможно, два типа, с местами и без)
Таблица "места" со ссылкой на элемент зала.
и к залу -- образ зала, нарисованный на SVG. А в "месте" -- полигон, изображающий это место на плане зала.
Далее рисуем SVG, и мышкой можно тыкать в места и "попадать" в нужное.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156164
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

только засел, уже ... примерчик

fedushok,
только для понимания смысла

структура
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
--
-- Скрипт сгенерирован Devart dbForge Studio for MySQL, Версия 6.3.358.0
-- Домашняя страница продукта: http://www.devart.com/ru/dbforge/mysql/studio
-- Дата скрипта: 27.01.2016 1:03:08
-- Версия сервера: 5.5.5-10.1.8-MariaDB
-- Версия клиента: 4.1
--


USE tickets;

CREATE TABLE halls (
  id int(11) NOT NULL AUTO_INCREMENT,
  halls_nm varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 3
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'залы, театры';

CREATE TABLE actions (
  id int(11) NOT NULL AUTO_INCREMENT,
  action_nm varchar(255) DEFAULT NULL,
  halls_id int(11) NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_actions_halls_id FOREIGN KEY (halls_id)
  REFERENCES halls (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 5
AVG_ROW_LENGTH = 4096
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'мероприятие';

CREATE TABLE place (
  id int(11) NOT NULL AUTO_INCREMENT,
  ryad int(11) DEFAULT NULL,
  mesto int(11) DEFAULT NULL,
  rang int(11) DEFAULT NULL,
  hall_id int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_place_halls_id FOREIGN KEY (hall_id)
  REFERENCES halls (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 9
AVG_ROW_LENGTH = 2048
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'места';

/* таблица сеансов, выступлений, содержащая дату время, выступлений может несколько в день*/
CREATE TABLE action_date (
  id int(11) NOT NULL AUTO_INCREMENT,
  dt datetime DEFAULT NULL,
  action_id int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_action_date_actions_id FOREIGN KEY (action_id)
  REFERENCES actions (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 6
AVG_ROW_LENGTH = 3276
CHARACTER SET utf8
COLLATE utf8_general_ci;

/* таблица продаж*/
CREATE TABLE stock (
  id int(11) NOT NULL AUTO_INCREMENT,
  act_dt_id int(11) NOT NULL,
  hall_id int(11) NOT NULL, /* избыточность устраняется по задаче*/
  place_id int(11) NOT NULL,
  PRIMARY KEY (id),
  INDEX FK_stock_halls_id (hall_id),
  INDEX FK_stock_place_id (place_id),
  CONSTRAINT FK_stock_action_date_id FOREIGN KEY (act_dt_id)
  REFERENCES action_date (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 2
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'продажи';


данные
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
--
-- Скрипт сгенерирован Devart dbForge Studio for MySQL, Версия 6.3.358.0
-- Домашняя страница продукта: http://www.devart.com/ru/dbforge/mysql/studio
-- Дата скрипта: 27.01.2016 1:11:23
-- Версия сервера: 5.5.5-10.1.8-MariaDB
-- Версия клиента: 4.1
--


SET NAMES 'utf8';

INSERT INTO tickets.actions(id, action_nm, halls_id) VALUES
(1, 'Концерт Газманова', 1);
INSERT INTO tickets.actions(id, action_nm, halls_id) VALUES
(2, 'Выступление баянистов', 1);
INSERT INTO tickets.actions(id, action_nm, halls_id) VALUES
(3, 'Смотр строя и песни', 2);
INSERT INTO tickets.actions(id, action_nm, halls_id) VALUES
(4, 'Постановка Оловянный солдатик', 2);

INSERT INTO tickets.action_date(id, dt, action_id) VALUES
(1, '2016-01-30 16:00:00', 1);
INSERT INTO tickets.action_date(id, dt, action_id) VALUES
(2, '2016-01-30 22:00:00', 1);
INSERT INTO tickets.action_date(id, dt, action_id) VALUES
(3, '2016-01-27 21:00:00', 2);
INSERT INTO tickets.action_date(id, dt, action_id) VALUES
(4, '2016-01-27 22:00:00', 3);
INSERT INTO tickets.action_date(id, dt, action_id) VALUES
(5, '2016-01-28 22:00:00', 4);

INSERT INTO tickets.halls(id, halls_nm) VALUES
(1, 'ДК Октябрь');
INSERT INTO tickets.halls(id, halls_nm) VALUES
(2, 'Театр Кукол');

INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(1, 1, 1, 1, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(2, 1, 2, 1, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(3, 1, 3, 1, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(4, 1, 4, 1, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(5, 2, 5, 2, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(6, 2, 6, 2, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(7, 2, 7, 2, 1);
INSERT INTO tickets.place(id, ryad, mesto, rang, hall_id) VALUES
(8, 2, 8, 2, 1);

INSERT INTO tickets.stock(id, act_dt_id, hall_id, place_id) VALUES
(1, 1, 1, 1);

запрос свободных мест
Код: sql
1.
SELECT p.*, IFNULL(s.id,'Свободно') AS stk FROM place p LEFT JOIN stock s ON p.id = s.place_id

в структуре возможно лучше сделать табл СЕАНС исключив ФОрейэн hall_id из Action и добавив в Action _date (таблица так и будет называться SEANS)
Для цены делаем табл PRICE (id, seans_id FK, rang , COST) - так как цена билета может варьироваться и от времени проведения, Допустим ДНЕМ ДЕШЕВЛЕ. Это я так вижу...
Добавим в STOCK(таблица продаж) поле ЦЕНА, в отработанном интерфейсе она будет подтягиваться по уже выбранному сеансу и месту.
Все
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156167
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается прорисовки мест - .... в PHP на основании доп полей в PLACE
Можно уместить и в одной таблице простенькую схему зала.
Добавим row_num для каждого зала в PLACE
SELECT ORDER BY rownum для строгости порядка
далее для примера если опущено место - это проход вдоль зала
если "пусто" в поле ряд - проход поперек
можно буквенные символы в доп поле и т.д. можно добавить поле этаж, сектор (условный)

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

имхо, суть не в прорисовке мест, это всего лишь украшательство.....
... ну и удобство конечно для кассира
но база должна быть понятной и логичной исходя из условия задачи.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156185
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov)))
с вами еще поспорить?
это свойство сущности , описывается одним полем, зачем плодить 3 поля для одного свойства? Задумайтесь....
Каким вы запросом соберете к примеру общее количество красных кресел? а синих?
Спорить тут думаю не о чем. Естественно, в одном поле хранить удобнее, но хранение цвета по составляющим в трёх полях тоже не стоит считать критической ошибкой. Я уже писал, что в запросах при определении полного значения цвета придётся соединять три поля, но вот например, вопросы насыщенности определённой составляющей цвета, при разбиении на три поля, решать проще.
Вообще, вопрос схож с хранением ФИО. Как его удобнее хранить в одном поле или в трёх....
В общем, думаю спорить не о чем, в зависимости от задумок использования цветов, так и надо хранить: или одним полем или с разбивкой по составляющим.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156189
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
структура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE place (
  id int(11) NOT NULL AUTO_INCREMENT,
  ryad int(11) DEFAULT NULL,
  mesto int(11) DEFAULT NULL,
  rang int(11) DEFAULT NULL,
  hall_id int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_place_halls_id FOREIGN KEY (hall_id)
  REFERENCES halls (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 9
AVG_ROW_LENGTH = 2048
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'места';

запрос свободных мест [src sql]


И всё-таки таблица мест неполная. По таком таблице схему зала не построить однако. Хотя бы из-за того, что нет указания, между какими местами находятся проходы, колонны и т.д.
Более того,
- нет возможности выбора мест в партере или на балконе.
- нет возможности определения секторов (не каких-то условных, а собственно говоря, физических, которые очень часто используются в спортивных учреждениях, таких как дворцы спорта, стадионы

Да и всё-таки текстовое обозначение ряда и номера места тоже в общем-то необходимо прикрутить. Ибо, повторяю, вполне возможно найти зал, в котором можно встретить ряд А, ряд В и т.д. А integer поля ryad и mesto использовать исключительно для построения схемы зала в браузере
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156206
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Mr.Fontaine]Alex_Ustinov)))

Вообще, вопрос схож с хранением ФИО. Как его удобнее хранить в одном поле или в трёх....
В общем, думаю спорить не о чем, в зависимости от задумок использования цветов, так и надо хранить: или одним полем или с разбивкой по составляющим. в этом поле не хранится значение цвета, здесь хранится "ценовая категория места" , я это уже писал. В дальнейшем это может понадобиться в запросах. Допустим человек просит "не самые плохие места"... и проще выбрать категорию >1 чем цвет <> синий (или какой он будет, этот плохой цвет). А если он захочет совсем не плохие места, то проще взять >2 ,нежели "не красный и не синий". хотя можно это сделать и через ценовую таблицу, я уже углубляюсь в дебри...
ФИО - это три отдельные составляющие. Допустим, поиск может быть и по имени и по отчеству.
В данном случае вы предлагаете делить Фамилию на три части. И где вы видели чтобы цвет АВТОмобиля к примеру хранили в трех полях.

Смысл -> В этом приложении есть другие именно важные моменты, кроме как заниматься такой ..., как вопрос о хранении цвета
авторИ всё-таки таблица мест неполная. По таком таблице схему зала не построить однако. Хотя бы из-за того, что нет указания, между какими местами находятся проходы, колонны и т.д.
Более того,
- нет возможности выбора мест в партере или на балконе.
- нет возможности определения секторов (не каких-то условных, а собственно говоря, физических, которые очень часто используются в спортивных учреждениях, таких как дворцы спорта, стадионы

Да и всё-таки текстовое обозначение ряда и номера места тоже в общем-то необходимо прикрутить. Ибо, повторяю, вполне возможно найти зал, в котором можно встретить ряд А, ряд В и т.д. А integer поля ryad и mesto использовать исключительно для построения схемы зала в браузере
повтор -> ЭТО сейчас не главное, прикручивайте ЧТО угодно, когда будет работать покупка-бронь билетов. Я показал минимум, что должно быть.
да не нужно перестраивать-перерисовывать весь зал.
В моем понимании (я на своем уровне владею PHP) -> один раз отрисовали зал, затем повторно раз в секунду (??) или по событию JavaScript нам интересно только свойство - Занято / неЗанято, чтобы задизейблить КЛИК. на этом КРЕСЛЕ. AJAX в действии...

Раскрашки - Чистейший уклон в сторону ненужного.

Мы как бы в подфоруме по MySQL и
Самый важный момент в этой базе - взаимодействие одновременной работы нескольких операторов/покупателей... т.е. отработка исключения одновременной покупки билета на одно место. Понятно что будут уникальные ключи и т.д.
Пишу одно и тоже, странное дело....
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156417
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov, про цвет мы с Вами о разном говорим: Вы про свой вариант, я - про вариант топикстартера. Я собственно говоря и не предлагаю хранить цвет в трёх полях (в моём варианте кстати, цвет один полем прописан, но видимо Вы мой вариант и не смотрели даже). Я говорю лишь о том, что вполне может быть возможность хранения цвета с разбивкой на составляющие. Цвет всё-таки это не фамилия - это всё-таки ФИО. Физически все три составляющие можно изменять до потери памяти отдельно друг от друга.

И уж про цвет автомобиля. Естественно, что в доске объявлений о продаже нет никакой необходимости разбивать цвет на три поля, а вот при реализации какого-либо конфигуратора автомобилей (необязательно видимый кстати, простому покупателю) запросто можно разбить на три столбца, чтобы выбирать похожие цвета по насыщенности одного из компонентов цвета.
Вот в данном случае довольно похожий вариант с конфигуратором автомобилей просматривается: администратор сайта вполне может выбирать каким цветом выделить ту ли иную цену, и ему вполне возможно понадобится иметь поиск по каждой составляющей цвета.
Повторяю, это решение автора, нужно ли ему хранить цвет в трёх полях или в одном. Мы мало знаем о задаче, чтобы утверждать, что разбивка цвета на составляющие это признак принципиального непонимания принципов построения таблиц.

Может хватит уже об этом спорить?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156420
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovодин раз отрисовали зал
ну и как Вы его отрисуете по Вашей табличке?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156506
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.FontaineМожет хватит уже об этом спорить?так прекращайте, я не спорю. Держите хоть в 8 полях
Топик стартер указал, что у него висит заказ на данный функционал.
Заниматься на начальном этапе украшательствами нет смысла. Еще структура базы не определена.
Может хватит вам акценты переставлять на ненужные вещи?

Посмотрите объективно, о чем вы говорите....:
есть таблица зала (как бы не хотелось, в ней будут присутствовать поля ряд, место),
возьмем 500 мест. И что, администратор захотел поменять цвета для ходовой категории мест и будет менять в 100 записях? Нет конечно. Об этом и речь, цвета в этой таблице и не нужны.
Так может проще водрузить это "администратору" в момент заполнения ценовых категорий на сеанс?
А еще проще заполнить цветами радуги 7 категорий и больше не думать об этом?
А подключатся PHP-HTML щики и сразу скажут - решать проще средствами CSS - и будут тоже правы.
в любом случае, это не функционал, это тюнинг, любой вариант не относится к основной задаче.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156523
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Fontaine,

для начала в простом табличном варианте, как строятся динамические таблицы
у топик стартера в тексте есть разумный смысл
авторТипы мест
1 сидение
2 пустое место
3 обозначение ряда
4 полупустое место
5 пустой рядсразу оговорюсь, я речь об цирковых аренах не веду (или стадионах).
Для таких вещей прикладывается план с "секторами"
и в табличном виде можно выбирать ряд место.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156557
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov[
Заниматься на начальном этапе украшательствами нет смысла. Еще структура базы не определена.
Может хватит вам акценты переставлять на ненужные вещи?

Я как раз о структуре базы говорю. Если на начальном этапе топикстартер сделает одно поле, а в середине ТЗ выяснится, что полей надо три, то придётся переделывать структуру базы и функционал однако. При чём тут украшательства? Хватит уж чушь-то писать.

Вообще наш разговор начался с Вашей фразы если цвета топик стартер указывал как поля, это непонимание что такое таблица.
я посмотрел на таблицу топистартера
Код: 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;


и сделал замечание, что
Какая разница как будет храниться цвет, в трёх полях FF, FF, FF или в одном FFFFFF?
Вы так и дали ответа, почему хранение параметров цвета в трёх столбцах, а не в одном,
это непонимание что такое таблица.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156575
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovПосмотрите объективно, о чем вы говорите....:
есть таблица зала (как бы не хотелось, в ней будут присутствовать поля ряд, место),
возьмем 500 мест. И что, администратор захотел поменять цвета для ходовой категории мест и будет менять в 100 записях? Нет конечно. Об этом и речь, цвета в этой таблице и не нужны.
Так может проще водрузить это "администратору" в момент заполнения ценовых категорий на сеанс?
А еще проще заполнить цветами радуги 7 категорий и больше не думать об этом?
А подключатся PHP-HTML щики и сразу скажут - решать проще средствами CSS - и будут тоже правы.
в любом случае, это не функционал, это тюнинг, любой вариант не относится к основной задаче.
Вы тут опять же о чём? какие сто записей? В каком варианте структуры БД в таблице зала есть цвет? Ни топикстартер, ни я такого вообще ни говорили...

...А, понятно, Вы опять же говорите о СВОЕЙ схеме, в которой есть в таблице зала колонка color. Так никто в ваш столбец color и не собирается писать цвет. Даже Вы не собираетесь этого делать. Вы придумали у себя в голове обозначения что 1 из этого столбца соответствует какому-то цвету, 2 - соответствует другому непонятно какому цвету и т.д., Топикстартер же сделал проще: в таблице мест в зале у него есть поле id_pr, которое является вашим же color, только имеет более осмысленное, для его предназначения, название и то, что ваше поле color ссылается на какие-то значения из головы, а у него id_pr ссылается на таблицу prices_table, в которой можно увидеть значение цвета и цены, выбранного для данного места в зале. Администратор сайта изменит цвет только в одной записи таблицы prices_table и даже не задумается сколько мест на картинке зала изменит цвет, ему не нужно знать это

P.S. Честно говоря, глядя на Ваши color и авторские id_pr складывается ощущение, что с пониманием процесса проектированием БД дела у топикстартера обстоят получше чем у Вас.
Извините, что обидел. Жаль толлко своего потраченного времени на этот разговор....
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156587
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovMr.Fontaine,
для начала в простом табличном варианте, как строятся динамические таблицы
для начала кассиру надо сразу понимать где в зале находятся проходы. Ибо сразу же первый же покупатель может попросить место крайнее к проходу, но в центре зала. По вашей табличке этого сделать не получится. И продажи сразу же придётся закрыть, так и не продав ни одного билета.

Alex_Ustinovу топик стартера в тексте есть разумный смысл
авторТипы мест
1 сидение
2 пустое место
3 обозначение ряда
4 полупустое место
5 пустой ряд
вообще тут непонятно, при чём тут топикстартер, я спрашивал про ВАШ вариант таблички мест в зале. Бред вобщем какой-то...

Alex_Ustinovсразу оговорюсь, я речь об цирковых аренах не веду (или стадионах).
Для таких вещей прикладывается план с "секторами"
и в табличном виде можно выбирать ряд место.
Ну и зря. А то ведь придётся после пары концертов приостановить работу кассы, так как окажется, что все ближайшие мероприятия запланированы в цирке и на стадионах. Тут и поймёте что план с секторами, балконами, ярусами надо было сразу предусматривать на этапе проектирования БД. Но Вам почему-то это казалось ненужными украшательствами...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156595
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.FontaineЯ как раз о структуре базы говорю. Если на начальном этапе топикстартер сделает одно поле, а в середине ТЗ выяснится, что полей надо три, то придётся переделывать структуру базы и функционал однако. При чём тут украшательства? Хватит уж чушь-то писать.Хватит вам уже.....хорош демагогией заниматься.
Вы говорите о раздувании структуры Базы и постоянно уводите разговор в сторону третьестепенного функционала.

ТЗ я не видел, вы тоже. Да и нет его.
Топикстартер только что занялся Web-программированием, в базах первый раз. Читая весь этот бред, он уже возможно в панике.
Я задал вопрос, вы не ответили
автора как вы будете хоть примерно соединять категорию места с ценой? если green=green то одно а если blue=blue то другое?
авторВы так и дали ответа, почему хранение параметров цвета в трёх столбцах, а не в одном,Возможно не так понял. Если это RGB то прошу прощения. Имеет место на жизнь. Не несет функционала, поэтому неважно.
В двух таблицах не было ни привязки к залу, ни ряда-места, поэтому таблицу считал как таблица мест в зале. с указанием цвета каждого места. Каюсь просмотрел.
У вас еще ко мне будут вопросы?
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156637
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу и зря. А то ведь придётся после пары концертов приостановить работу кассы, так как окажется, что все ближайшие мероприятия запланированы в цирке и на стадионах. Тут и поймёте что план с секторами, балконами, ярусами надо было сразу предусматривать на этапе проектирования БД. Но Вам почему-то это казалось ненужными украшательствами...))) бред полный....
авторзапланированы в цирке и на стадионах.вы не покупали билет на стадион, сходите, вам покажут план секторов...
да я еще и описал ситуацию с Округлыми залами...
Если бы вы упомянули об интернет сайте, где пользователь сам покупает себе билет и он не знает зала, и ему надо 2-3 места рядом, я бы с вами согласился, а так... все с вами ясно...
Каждый кассир, ну скажем почти каждый, имеет данные по залу, да и не только на бумаге, но и на стене ПЛАКАТ висит

авторвообще тут непонятно, при чём тут топикстартер, я спрашивал про ВАШ вариант таблички мест в зале. Бред вобщем какой-то...бред не несите
вы хоть что-то в Вэбе делали в динамике?
пример простой таблицы зала (или сектора, как вам угодно) в тэгах форума
Проход перед заломРяд1Место нумер1 Проход центральныйМесто нумер2 Место Нумер3Ряд2Место нумер1 Проход центральныйМесто нумер2 Место Нумер3Проход среднийРяд1Место нумер1 Проход центральныйМесто нумер2 Место Нумер3Ряд2Место нумер1 Проход центральныйМесто нумер2 Место Нумер3 хорош, хорош, хорош.... успокойтесь уже
ваши кассы еще ждут отрисовки, мои уже с утра работают и успешно продают...
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156645
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovЯ задал вопрос, вы не ответили
автора как вы будете хоть примерно соединять категорию места с ценой? если green=green то одно а если blue=blue то другое?
Так это соединение сразу у автора темы прописано в табличке prices_table
id_pr - категория места, price_value - цена
id_pr INT UNSIGNEDprice_value INT UNSIGNEDred TINYINT UNSIGNEDgreen TINYINT UNSIGNEDblue TINYINT UNSIGNED110002551280215002001000320000100255авторВы так и дали ответа, почему хранение параметров цвета в трёх столбцах, а не в одном,Возможно не так понял. Если это RGB то прошу прощения. Имеет место на жизнь. Не несет функционала, поэтому неважно.
В двух таблицах не было ни привязки к залу, ни ряда-места, поэтому таблицу считал как таблица мест в зале. с указанием цвета каждого места. Каюсь просмотрел.
У вас еще ко мне будут вопросы?[/quot]
Конечно, привязки к залу у автора нет. Если Вы под двумя таблицами понимаете эти
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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;

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;


Так топикстартер же и сказал, что привязка к залу идёт через название этих двух таблиц. Об этом тема и началась. У него эти две таблицы на каждое мероприятие создаются вновь и вновь. Из-за этого на автора, собственно говоря, и накинулись.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156663
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovвы не покупали билет на стадион, сходите, вам покажут план секторов...С началом фразы не угадали, вторая половина верна. Более того, добавлю, что разбиение на сектора совем не означает, что каждый сектор анчинается с первого ряда и первого места. Нумерация мест бывает сквозная по всем секторам
Alex_Ustinovда я еще и описал ситуацию с Округлыми залами... Форма зала на проектирование в БД вообще ни как не влияет.
Alex_UstinovЕсли бы вы упомянули об интернет сайте, где пользователь сам покупает себе билет и он не знает зала, и ему надо 2-3 места рядом, я бы с вами согласился, а так... все с вами ясно...
Каждый кассир, ну скажем почти каждый, имеет данные по залу, да и не только на бумаге, но и на стене ПЛАКАТ висит
Во-первых, какая разница кто где покупает билет? Сайты, на то и сайты, что каждый откуда угодно может посмотреть и купить. Или чё, Вы предпочитаете далать сайт для зрителей со схемами залов, а для кассиров программу без схем, простые квадратики с номерами рядов и мест???? Пускай кассиры по бумажкам схемы залов смотрят? Ну-ну....
Да и смотрю, Вы давненько билетов никуда не покупали. Щас даже у нас во многих кассах стоят по два монитора: один к покупателю, другой к кассиру. И кассир сам предлагает выбрать места зрителю.
так что зачем Вы сказали, что есть принципиальная разница покупки билета зрителем самостоятельно и выдачей кассиром билета вообще не понимаю. Мне надо два места в центре зала у прохода, но я предпочитаю сам посмотреть на какой ряд сесть: на пятый или на шестой. и с какой стороны с правой или с левой

Кстати, немного отвлекусь на пример из жизни. Тут в новогодние праздники покупал билеты в цирк на группу человек, так было условие, что за 800 рублей и подальше от выхода артистов. Экран как раз был только у кассира, нам она ничего не показывала. Да, сама выбрала билеты, чтоб подходили под наши условия и чтоб вместились 8 человек, но осадок, что я мог бы выбрать получше остался однако. Мы бы с женой может быть и не на один ряд купили бы. По три-четыре места друг за другом на двух-трёх смежных рядах. В общем не очень приятные впечатление от покупки билетов в цирк.
авторвы хоть что-то в Вэбе делали в динамике?
В Вэбе я был с 2001 по 2009 год. Делал много чего, но тут не об этом. Мы больше про таблички разговариваем....
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156665
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Fontaine,

так в том и суть, что это было полное непонимание топикстартером. Сейчас он понял, задача решается дальше.
Цель форума - натолкнуть на мысль, а не выдать готовое решение.
Раз сказали два сказали, он опять о своей передаче в препарестатмнт.
Никто не взъелся, я не отказался от дальнейшего прочтения топика, вчера перед сном набросал как видел (и то после "опубликования" понял. что не совсем так...)
честно говоря пробегаю мельком топик, вчитываться в суть глубоко - это если свободное время...
Я хотел показать принцип получения свободных мест, как всегда это бывает, справочный таблиц куча а функциональность непонятна
А если углубляться дальше, то здесь действительно можно прикрутить множество таблиц и дополнительного функционала.
А то что мы уже с вами обсуждаем, я больше чем уверен, решаться будет в PHP+javaScript (я думаю у ТС PHP), вопросы для соседнего форума.
...
Рейтинг: 0 / 0
Как имя таблицы в запросе выразить переменной?
    #39156913
fedushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читая ваши сообщения, в воображении всплывает басня Крылова по лебедь, рак и щуку. Вы начинается додумывать за меня. Источником такой несогласованности конечно является неполнота информации, которую в рамках форума полностью восполнить сложно. Пусть не своевременно, но я постараюсь часть ваших разногласий разрешить.
Цвет места. Его я храню в RGB, чтобы его было удобно инвертировать. Уже писал об этом. Считаю, что мне его целесообразней хранить в базе.
Mr.FontaineТак топикстартер же и сказал, что привязка к залу идёт через название этих двух таблиц. Об этом тема и началась. У него эти две таблицы на каждое мероприятие создаются вновь и вновь. Из-за этого на автора, собственно говоря, и накинулись.
Совершено верно. Mr.Fontaine, вы совершено верно определили суть диалога с моей стороны.
Alex_UstinovРаз сказали два сказали, он опять о своей передаче в препарестатмнт.
Восстанавливая хронологию, следует отметить. На первоначальный вопрос мне была рекомендована конструкция PREPARE STATEMENT, которая привела к коду (хотя и рабочему) построенному не в лучших традициях программирования. Я сразу выразил это сомнение на что был дан ответ - структура БД не правильная. Потом искренне не понимая, не смотря на "раз" и "два", я пытался выяснить каков же критерий этой неправильности. Поэтому когда я говорил о PREPARE STATEMENT я пытался уже сдвинуть обсуждение факта неправильной структуры и выудить из своих собеседников критерий этой неправильности. Например, почему яблоко незрелое? Оно незрелое не потому что оно незрелое, а потому что зелёное и кислое. Яблоко не БД, но ведь словесно то можно обосновать своё мнение? К концу третьей страницы темы я получил вариант БД, за что премного благодарен.

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

вот. вы добились результата, это главное.
А по поводу басни - в каждом топике такое... каждый смотрит со свей колокольни.
авторПоэтому когда я говорил о PREPARE STATEMENT я пытался уже сдвинуть обсуждение факта неправильной структуры и выудить из своих собеседников критерий этой неправильности. фактом является то, что при появлении нового зала вам потребуется создавать новую таблицу, - > запросы динамические, сложнейшие порой невозможные запросы по всем таблицам "размноженной сущности".
Иногда полезно приложить к другой отрасли, допустим под овощи - фрукты заводим одну таблицу, а не таблицу овощей и табл фруктов. Вот и все что было...
Я честно говоря, думал вы дольше будете с Вебкой заниматься.
...
Рейтинг: 0 / 0
80 сообщений из 80, показаны все 4 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как имя таблицы в запросе выразить переменной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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