gpt4 book ai didi

mysql - 使用 If 或 Case(或任何其他方法)根据国家/地区代码递增值

转载 作者:行者123 更新时间:2023-11-29 14:05:59 26 4
gpt4 key购买 nike

我像这样构建了这个表,它为每个用户分配一个从零开始的唯一的articleId。

CREATE TABLE `articles` (
`artcId` INT(10) NOT NULL AUTO_INCREMENT,
`artcUserId` INT(10) NOT NULL DEFAULT '0',
`artcStackId` INT(10) NOT NULL DEFAULT '0',
`artcTitle` VARCHAR(200) NULL DEFAULT NULL,
PRIMARY KEY (`artcUserId`, `artcId`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

还有一个部分为每篇文章分配一个运行序列号(artcStackId)。您将在代码中看到。

问题是,是否可以根据用户所在的国家/地区分配 artcStackId?该国家/地区代码将来自 php。

例如:如果是美国,则从 10001+1 开始,如果是英国,则从 20001+1 开始,如果是 CA,则从 30001+1 开始,依此类推。

可以这样做吗?

我当前的 SQL 查询如下:

insert into articles (artcUserId, artcStackId, artcCountry, artcTitle)
select 4,IFNULL((MAX(artcStackId)+1) ,0),'US','Hello World'
FROM articles;

但我想要的方式必须是这样的(这只是一个示例 sql):

insert into articles (artcUserId, artcStackId, artcCountry, artcTitle)
select 4, IF artcCountry = 'US' then (selct MAX(artcStackId)+1
where artcCountry = 'US'),
'US','Hello World'
FROM articles;

我希望你能明白。

enter image description here enter image description here

最佳答案

我建议您使用触发器:

CREATE TRIGGER ins_articles
BEFORE INSERT ON articles
FOR EACH ROW
SET new.artcStackId=coalesce(
(select max(artcStackId)
from articles
where artcCountry = new.artcCountry)+1,1)
;

或者类似的东西:

CREATE TRIGGER ins_articles
BEFORE INSERT ON articles
FOR EACH ROW
SET new.artcStackId=coalesce(
(select max(artcStackId)
from articles
where artcCountry = new.artcCountry)+1,

case when new.artcCountry = 'US' then 10001
when new.artcCountry = 'UK' then 20001
when new.artcCountry = 'CA' then 30001
end)
;

see it working here 。然后您可以在不指定列 artcStackId 的情况下插入,因为它会自动计算。

关于mysql - 使用 If 或 Case(或任何其他方法)根据国家/地区代码递增值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14338999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com