Использование переменных вместо имен полей в запросе выбора mysql

Я много искал, но не могу понять, как это сделать, если это возможно...

У меня есть эта таблица:

CREATE TABLE bilanci (
  id              int AUTO_INCREMENT NOT NULL,
  medicoid        int NOT NULL,
  `1`             int NOT NULL DEFAULT 0,
  `2`             int NOT NULL DEFAULT 0,
  `3`             int NOT NULL DEFAULT 0,
  `4`             int NOT NULL DEFAULT 0,
  `5`             int NOT NULL DEFAULT 0,
  `6`             int NOT NULL DEFAULT 0,
  `7`             int NOT NULL DEFAULT 0,
  `8`             int NOT NULL DEFAULT 0,
  `9`             int NOT NULL DEFAULT 0,
  `10`            int NOT NULL DEFAULT 0,
  `11`            int NOT NULL DEFAULT 0,
  `12`            int NOT NULL DEFAULT 0,
  conguagliodic   decimal(10,2),
  totbilancianno  int DEFAULT 0,
  totpagato       decimal(12,2),
  totdapagare     decimal(12,2),
  conguaglio      decimal(10,2),
  rifanno         int NOT NULL,
  pvimun          decimal(10,4) NOT NULL DEFAULT 9.4432,
  PRIMARY KEY (id)
) ENGINE = InnoDB;

Поля с номерами соответствуют месяцам, и мне нужно выбрать как:

select medicoid, (month(curdate()) -2), totdapagare from bilanci

куда (month(curdate()) -2) соответствуют области, которую мне нужно выбрать.

Это возможно?

1 ответ

Решение

Я бы посоветовал вам нормализовать структуру вашей базы данных, у вас может быть такая таблица:

CREATE TABLE bilanci (
  id              int AUTO_INCREMENT NOT NULL,
  medicoid        int NOT NULL,
  conguagliodic   decimal(10,2),
  totbilancianno  int DEFAULT 0,
  totpagato       decimal(12,2),
  totdapagare     decimal(12,2),
  conguaglio      decimal(10,2),
  pvimun          decimal(10,4) NOT NULL DEFAULT 9.4432,
  PRIMARY KEY (id)
) ENGINE = InnoDB;

и вторая таблица bilanci_month:

create table bilanci_month (
  id int auto_increment,
  bilanci_id int,
  rifanno int NOT NULL,
  month int NOT NULL,
  value int)

(bilanci_id может быть определен как внешний ключ bilanci_month), тогда ваш запрос на выборку будет выглядеть так:

select
  b.medicoid,
  coalesce(bm.value, 0),
  b.totdapagare from bilanci
from
  bilanci b left join bilanci_month bm
  on b.id = bm.bilanci_id and bm.month = month(curdate())-2

также будьте осторожны с month(curdate())-2Что будет, если месяц январь или февраль? Вы должны реализовать некоторую логику, чтобы получить, например, ноябрь или декабрь предыдущего года (и добавить эту логику в ваше объединение).

Другие вопросы по тегам