在 mysql select 查询中使用变量而不是字段名
Using variables instead of fieldnames in mysql select query
我搜索了很多,但我不知道该怎么做,如果可能的话...
我有这个 table:
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 比如:
select medicoid, (month(curdate()) -2), totdapagare from bilanci
其中(month(curdate()) -2)
对应我需要的字段select.
这可能吗?
我建议你规范化你的数据库结构,你可以像这样 table:
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;
和第二个 table 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查询就是这样的:
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
,如果月份是一月或二月会怎样?您必须实施一些逻辑来获取例如前一年的 11 月或 12 月(并将此逻辑添加到您的连接中)。
我搜索了很多,但我不知道该怎么做,如果可能的话...
我有这个 table:
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 比如:
select medicoid, (month(curdate()) -2), totdapagare from bilanci
其中(month(curdate()) -2)
对应我需要的字段select.
这可能吗?
我建议你规范化你的数据库结构,你可以像这样 table:
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;
和第二个 table 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查询就是这样的:
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
,如果月份是一月或二月会怎样?您必须实施一些逻辑来获取例如前一年的 11 月或 12 月(并将此逻辑添加到您的连接中)。