【154】MySQL使用字符串作为主键的时候,如何按照特定id顺序返回结果。

创建表格

CREATE TABLE `t_product` (
  `c_id` varchar(32) NOT NULL COMMENT 'ID',
  `c_name` varchar(200) NOT NULL COMMENT '产品名称',
  `c_create_time` datetime NOT NULL COMMENT '创建时间',
  `c_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标识',
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品'

t_product 是产品表,id是32为UUID。

按照创建时间倒叙查询SQL:

SELECT * FROM t_product ORDER BY c_create_time DESC;

结果如下图:

在这里插入图片描述

有些场景下,需要把特定的产品置顶,而其他的产品还是安装原先的顺序排列。那么我们执行下面的SQL:

SELECT 
    c_id, c_name, c_create_time, c_del,
    (
        CASE
            WHEN c_id='9a4c8f8196b311ebbeda1c3947c61214' THEN 0
            WHEN c_id='a5547dad96b311ebbeda1c3947c61214' THEN 1
            WHEN c_id='6d2ffa5696b411ebbeda1c3947c61214' THEN 2
            ELSE 999
        END
    ) c_sort
FROM t_product ORDER BY c_sort ASC, c_create_time DESC;

查询结果如图:

在这里插入图片描述

注意:

如果你使用 mybatis 框架,需要注意两点:

  1. 置顶的数据id以列表的形式传入sql的xml中。使用 foreach 标签来循环生成 WHEN… THEN…语句。
  2. 引用参数的时候因为是在列上,需要使用${item}${index} 而不能使用井号;否则mybatis报错。你需要在业务上保证传入的参数是安全的,防止sql注入。c_sort 部分的代码类似下面这种:
(
    CASE
    <foreach collection="idList" item="item" open="" close="" separator=" " index="index">
        WHEN c_id='${item}' THEN ${index}
    </foreach>
        WHEN c_id='-1' THEN 999
        ELSE 999
    END
) c_sort
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要连接到数据库,并创建一个表来存储接收到的字符串。可以使用以下代码: ``` import mysql.connector # 连接到数据库 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 创建一个表来存储接收到的字符串 mycursor = mydb.cursor() mycursor.execute("CREATE TABLE received_strings (id VARCHAR(255) PRIMARY KEY, string VARCHAR(255))") ``` 接下来,你需要编写代码来将接收到的字符串插入到数据库中。可以使用以下代码: ``` import socket import mysql.connector # 连接到数据库 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 创建一个socket并监听端口 s = socket.socket() host = socket.gethostname() port = 12345 s.bind((host, port)) s.listen(5) while True: # 接收客户端的连接 c, addr = s.accept() print('Got connection from', addr) # 接收客户端发送的字符串 string = c.recv(1024).decode('utf-8') print('Received string:', string) # 将接收到的字符串插入到数据库中 sql = "INSERT INTO received_strings (id, string) VALUES (%s, %s)" val = (string, string) mycursor = mydb.cursor() mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "record inserted.") # 关闭连接 c.close() ``` 在这个代码中,我们使用了Python的Socket模块来接收客户端发送的字符串,并将其存储到MySQL数据库中。我们为接收到的字符串创建了一个,并将其与字符串一起插入到数据库中。最后,我们关闭了与客户端的连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值