Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - сортиране на разделен със запетая низ в колона

Възможно е, но всъщност не е добра идея.

Като пример можете да разделите списък, разделен със запетая, като генерирате диапазон от числа и го използвате с SUBSTRING_INDEX, за да получите всеки елемент. Въпреки това диапазонът от числа трябва да бъде толкова голям, колкото максималният брой ограничени стойности.

След това можете да използвате GROUP_CONCAT, за да се присъедините към списъка отново заедно в правилния ред. Имайте предвид, че редът ще бъде различен в зависимост от това дали сте прехвърлили разделените стойности като числа / цели числа или сте ги оставили като низове.

SELECT id, title, GROUP_CONCAT(aNumber ORDER BY aNumber)
FROM
(
    SELECT id, title, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', tens.acnt * 10 + units.acnt + 1), ',', -1) AS UNSIGNED) AS aNumber
    FROM some_table
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
    WHERE LENGTH(numbers) - LENGTH(REPLACE(numbers, ',', '')) >= tens.acnt * 10 + units.acnt
) sub0
GROUP BY id, title;

Демонстрирано тук на SQL fiddle (ако SQL fiddle реши да работи):-

http://www.sqlfiddle.com/#!9/c9703ee/4

Първият избор прехвърля стойностите като цели числа, за да ги сортира числено, вторият не ги прехвърля, а просто ги оставя като низове, следователно редът на сортиране е различен.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. С помощта на Docker получавам грешката:SQLSTATE[HY000] [2002] Няма такъв файл или директория

  2. FIND_IN_SET с множество стойности

  3. CodeIgniter - Групиране по с поръчка, като не работи според очакванията

  4. Как да изчислим медиана в MySQL

  5. Лошо ли е за производителността да се изберат всички колони?