MySQL字符串函数

xjs*_*iya 8 mysql string function

我有一个包含以下数据的表:

reservno || icode || location
00004    || 00021 || Bohol - Cebu
00004    || 00022 || Cebu - Manila
00004    || 00014 || Manila - Bohol
Run Code Online (Sandbox Code Playgroud)

我使用此查询来检索位置的连接值.

SELECT GROUP_CONCAT(location) from location_list where reservno='00004';
Run Code Online (Sandbox Code Playgroud)

查询结果如下所示:

GROUP_CONCAT(location)
Bohol - Cebu,Cebu - Manila,Manila - Bohol
Run Code Online (Sandbox Code Playgroud)

但我想要做的是查询看起来像这样:Bohol - Cebu - Manila - Bohol.我想合并这样的结果.我怎样才能做到这一点?我对MySQL字符串函数并不熟悉,所以我需要一些关于如何使其工作的想法.任何帮助将不胜感激.非常感谢!

Ome*_*esh 6

你需要SEPARATORGROUP_CONCAT函数中使用:

SELECT  GROUP_CONCAT(IF((@var_ctr := @var_ctr + 1) = @cnt, 
                        location, 
                        SUBSTRING_INDEX(location,' - ', 1)
                       ) 
                       ORDER BY loc_id ASC
                       SEPARATOR ' - ') AS locations

FROM location_list, 
     (SELECT @cnt := COUNT(1), @var_ctr := 0 
      FROM location_list 
      WHERE reservno='00004'
     ) dummy
WHERE reservno='00004';
Run Code Online (Sandbox Code Playgroud)

示例:SQLFIDDLE

将多个值存储在同一列中不是一个好习惯,更好的方法是:

reservno || icode || location_from || location_to
00004    || 00021 || Bohol         || Cebu
00004    || 00022 || Cebu          || Manila
00004    || 00014 || Manila        || Bohol
Run Code Online (Sandbox Code Playgroud)

  • @xjshiya不保证会按照您一定想要的顺序出现.您应该确保指定`order by`子句. (2认同)