我有用户目录。这是ddl
CREATE TABLE `user_contents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`content_type` int(11) NOT NULL,
`order_id` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
CONSTRAINT `user_contents_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
)
order\u id是新添加的列。我需要根据content\u type和user\u id的值更新order\u id的值。content\u type可以是0或1。
根据内容类型和用户id,我必须更新订单id,如上面的结果所示。对于相同的用户标识和内容类型,订单标识需要从0递增。
有人能帮我更新查询吗
我使用的是5.7.23-0ubuntu0.16.04.1版本的mysql数据库
编辑:-现在要求略有改变。用户id的数据类型不是int,而是varchar,包含dal001、hal001等值
3条答案
按热度按时间pdtvr36n1#
尝试以下查询,以更新
order_id
价值观。它使用用户定义的会话变量。这个查询基本上由两部分组成。第一部分决定
order_id
每id
,基于定义的逻辑。第二部分与第三部分相结合
user_contents
表格使用id
并更新order_id
价值观。w6lpcovy2#
在获得最大订单id之后,增加orderid并传递给某个变量,然后使用updatequery进行更新。
w3nuxt5m3#
最好用一个视图来实现你想要的。以下是一个不使用窗口函数和会话变量的选项:
演示
建议在这里进行更新的主要问题是
order_id
列显然是派生数据。这意味着您以后可能需要再次更新。因此,视图通过在实际需要时生成所需的输出来完全避免这个问题。