Использование переменных вместо имен полей в запросе выбора 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
Что будет, если месяц январь или февраль? Вы должны реализовать некоторую логику, чтобы получить, например, ноябрь или декабрь предыдущего года (и добавить эту логику в ваше объединение).