gpt4 book ai didi

MySQL ORDER By one Specific value in column (具有逗号分隔值)

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:47 25 4
gpt4 key购买 nike

我想根据城市(从下拉列表中选择)对用户记录进行排序。就像如果我在查询中传递 city_id 22,那么我希望首先包含 city_id 22 的所有行,然后是其余行。

我知道 WHERE find_in_set('22',city_ids) 会给我正确的结果,但它不会返回所有行,所以我想使用一些 ORDER BY

我试过 ORDER BY FIND_IN_SET('22',city_ids) 但它不起作用。我该如何解决这个问题,有什么最好的方法吗?

用户表:

Id    Name     city_ids
1 AAAAA 10,22,30
2 BBBBB 11,28
3 CCCCC 15,22,44
4 DDDDD 19,99,
5 EEEEE 55,27,22

想要像下面这样排序的输出:

Id    Name     city_ids
1 AAAAA 10,22,30
3 CCCCC 15,22,44
5 EEEEE 55,27,22
2 BBBBB 11,28
4 DDDDD 19,99,

最佳答案

你可以这样做:

ORDER BY (FIND_IN_SET('22', city_ids) > 0) DESC

这会将匹配放在首位。

然后你应该修复你的数据模型。它坏了,坏了,坏了。出于多种原因,将 ID 列表存储在字符串中是错误的:

  • 数据类型(大概)是错误的。 ID 是数字,不应存储为字符串。
  • 在一列中存储多个值不是 SQL 存储事物的方式。
  • ID 应正确声明外键关系,但您不能声明。
  • SQL 没有很好的处理字符串的函数。
  • 生成的查询无法利用索引或分区,从而影响性能。
  • SQL 具有用于存储事物列表的非常棒的数据结构。它被称为,而不是字符串列。

关于MySQL ORDER By one Specific value in column (具有逗号分隔值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56344157/

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