Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Использовать значение одного поля как название другого.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Использовать значение одного поля как название другого.

Страниц (1): [1]
 

1. igosja - 07 Января, 2017 - 21:29:59 - перейти к сообщению
На сайте есть 3 таблицы (в сокращенном виде):
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `team`
  2. (
  3.   `team_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  4.   `team_base_id` TINYINT(2) DEFAULT 2,
  5.   `team_basemedical_id` TINYINT(2) DEFAULT 1,
  6.   `team_basephisical_id` TINYINT(2) DEFAULT 1,
  7.   `team_baseschool_id` TINYINT(2) DEFAULT 1,
  8.   `team_basescout_id` TINYINT(2) DEFAULT 1,
  9.   `team_basetraining_id` TINYINT(2) DEFAULT 1
  10.  );

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `buildingbase`
  2. (
  3.   `buildingbase_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  4.   `buildingbase_building_id` TINYINT(1) DEFAULT 0,
  5.   `buildingbase_team_id` SMALLINT(5) DEFAULT 0
  6. );

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `building`
  2. (
  3.   `building_id` TINYINT(1) PRIMARY KEY AUTO_INCREMENT,
  4.   `building_name` VARCHAR(255) NOT NULL
  5. );
  6. INSERT INTO `building` (`building_name`)
  7. VALUES ('base'),
  8.        ('basemedical'),
  9.        ('basephisical'),
  10.        ('baseschool'),
  11.        ('basescout'),
  12.        ('basetraining');

Вопрос: можно ли как-то в одном запросе склеить `building_name` из третьей таблицы с префиксом team и окончанием id и скормить это системе как название поля? Примерно как-то так:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `team`
  2. LEFT JOIN `buildingbase`
  3. ON `team_id`=`buildingbase_team_id`
  4. LEFT JOIN `building`
  5. ON `buildingbase_building_id`=`building_id`
  6. SET `team_+building_name+_id`=`team_+building_name+_id`+'1'

Подскажите, пожалуйста, как правильно записать вот эту конструкцию - `team_+building_name+_id`?
Сейчас это делается 6 отдельными запросами (по количеству записей в таблице building). Хотелось бы это все сделать одним запросом.
2. Sail - 09 Января, 2017 - 09:58:28 - перейти к сообщению
igosja, есть вариант с хранимой процедурой.
Например: Passing FieldName as Parameter in MySQL Stored Procedure

 

Powered by ExBB FM 1.0 RC1