sql >> Database >  >> RDS >> Mysql

MySQL - door komma's gescheiden tekenreeks in kolom sorteren

Het is mogelijk, maar niet echt een goed idee.

U kunt bijvoorbeeld een door komma's gescheiden lijst opsplitsen door een reeks getallen te genereren en die met SUBSTRING_INDEX te gebruiken om elk element te krijgen. Het bereik van getallen moet echter zo groot zijn als het maximale aantal gescheiden waarden.

U kunt dan GROUP_CONCAT gebruiken om de lijst weer in de juiste volgorde bij elkaar te voegen. Houd er rekening mee dat de volgorde zal verschillen, afhankelijk van of u de opgesplitste waarden als getallen / gehele getallen hebt gegoten of ze als tekenreeksen hebt achtergelaten.

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;

Hier gedemonstreerd op SQL Fiddle (als SQL Fiddle besluit te werken):-

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

De eerste selectie is het casten van de waarden als gehele getallen om ze numeriek te sorteren, de tweede selectie cast ze niet maar laat ze gewoon als strings, vandaar dat de sorteervolgorde anders is.




  1. H2 postgresql-modus lijkt niet te werken voor mij

  2. FOUT 1452:Kan een onderliggende rij niet toevoegen of bijwerken:een beperking van een externe sleutel mislukt

  3. Hoe werkt SQL-injection en hoe bescherm ik me ertegen

  4. Waarmee moet ik mysql_result vervangen voor MySQLi