sql >> Databáze >  >> RDS >> Mysql

Řazení desetinných míst v PHP nebo MySQL

Je to ošklivé, ale bude to fungovat:

ORDER
   BY SUBSTRING_INDEX(CONCAT( col ,'.'),'.',1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',2),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',3),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',4),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',5),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',6),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',7),'.',-1) + 0

Chcete-li otestovat tyto výrazy, můžete je použít v SELECT a ověřit, že extrahují správné komponenty a jsou správně seřazeny:

SELECT col
     , SUBSTRING_INDEX(CONCAT( col ,'.'),'.',1) + 0 AS p1
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',2),'.',-1) + 0 AS p2
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',3),'.',-1) + 0 AS p3
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',4),'.',-1) + 0 AS p4
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',5),'.',-1) + 0 AS p5
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',6),'.',-1) + 0 AS p6
     , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',7),'.',-1) + 0 AS p7
  FROM mytable 
 ORDER BY 2,3,4,5,6,7,8

Spíše než vysvětlovat, jak to funguje, uvedu jen důležité "triky"

  • připojit koncové "." na konci sloupce to potřebujete, abyste se na poslední pozici nedostali vícekrát,

  • použijte SUBSTRING_INDEX k načtení části až do n-tého '.'

  • použijte SUBSTRING_INDEX k načtení koncové části (čtení pozpátku, k úvodní tečce

  • přidat nulu, převést řetězec na číselnou hodnotu



  1. Počítání počtu spojených řádků v levém spojení

  2. návrh databáze pro kvíz s různými jazyky

  3. Místní replikace/synchronizace databáze Firebird do online databáze

  4. předávání id jména při kliknutí pomocí ajax do php