如何使用数字和标记对文本字段进行排序

时间:2019-05-14 09:52:30

标签: mysql

我有下表:

 +----+-----------------------------------------+----------+
 | id | sort                                    |  channel |
 +----+-----------------------------------------+----------+
 | m2 | ["m2","1","2","11","m4","m3","m5","m1"] | E        |
 | 2  | ["m2","1","2","11","m4","m3","m5","m1"] | H2       |
 | 1  | ["m2","1","2","11","m4","m3","m5","m1"] | H1       |
 | 11 | ["m2","1","2","11","m4","m3","m5","m1"] | H3       |   
 | m4 | ["m2","1","2","11","m4","m3","m5","m1"] | S1       |
 | m3 | ["m2","1","2","11","m4","m3","m5","m1"] | C3       |
 | m5 | ["m2","1","2","11","m4","m3","m5","m1"] | M4       |
 | m1 | ["m2","1","2","11","m4","m3","m5","m1"] | G6       |
 +----+-----------------------------------------+----------+

使用MySQL查询:

 SELECT id, sort, channel FROM (SELECT s.id, c.sort, s.channel FROM streams s, channels c WHERE JSON_SEARCH(s.bouquet, 'one', 1) IS NOT NULL AND JSON_SEARCH(c.bouquet, 'one', 1) IS NOT NULL AND JSON_SEARCH(c.sort, 'one', s.id) IS NOT NULL UNION SELECT m.marker, c.sort, m.channel FROM markers m, channels c, streams s WHERE JSON_SEARCH(m.bouquet, 'one', 1) IS NOT NULL AND JSON_SEARCH(c.bouquet, 'one', 1) IS NOT NULL AND JSON_SEARCH(c.sort, 'one', m.marker) IS NOT NULL) ch ORDER BY LOCATE(id, CONCAT("'", sort, "'"));

我高于表格结果,我需要使用sort字段对id进行排序...因此输出必须是:

| id |
------
  m2
  1
  2
  11
  m4
  m3
  m5
  m1

我认为问题出在:ORDER BY LOCATE(id, CONCAT("'", sort, "'")),但我尝试修改查询而没有获得期望的输出成功...要达到正确的输出水平,我需要做些什么?

1 个答案:

答案 0 :(得分:1)

使用此:

ORDER BY LOCATE(CONCAT('"', id, '"'), sort)

这些值包含双引号,因此串联必须将它们用双引号而不是单引号引起来。
查看简化的demo