{"id":39,"date":"2009-11-04T14:08:11","date_gmt":"2009-11-04T14:08:11","guid":{"rendered":"http:\/\/liberty.fdn.fr\/?p=39"},"modified":"2025-08-17T20:13:38","modified_gmt":"2025-08-17T20:13:38","slug":"group-by-qui-respecte-lordre-numerique-avec-mysql","status":"publish","type":"post","link":"http:\/\/renaudguezennec.eu\/index.php\/2009\/11\/04\/group-by-qui-respecte-lordre-numerique-avec-mysql\/","title":{"rendered":"GROUP BY qui respecte l&#8217;ordre num\u00e9rique Avec MySQL"},"content":{"rendered":"<p>Triez un champ avec un tri num\u00e9rique et non sur les codes des caract\u00e8res en MySQL. Il est parfois utile de trier une liste d&#8217;enregistrement gr\u00e2ce \u00e0 un champ. Si ce champ contient des chiffres mais qu&#8217;il est d\u00e9fini comme un varchar. La fonction ORDER BY fera un mauvais tri. Cas classique et id\u00e9al: Type: Integer(11) Data:<\/p>\n<p>+&#8212;&#8212;&#8212;-+<br \/>\n| Nombres |<br \/>\n+&#8212;&#8212;&#8212;-+<br \/>\n| 10 |<br \/>\n| 500 |<br \/>\n| 1 |<br \/>\n| 3000 |<br \/>\n| 20 |<br \/>\n| 50 |<br \/>\n| 30 |<br \/>\n| 1000 |<br \/>\n+&#8212;&#8212;&#8212;-+<\/p>\n<p>Requ\u00eate nomale.<br \/>\nRequ\u00eate: SELECT numbers from table order by numbers<br \/>\nNous obtenons ce r\u00e9sultat:<\/p>\n<p>+&#8212;&#8212;&#8212;-+<br \/>\n| Nombres |<br \/>\n+&#8212;&#8212;&#8212;-+<br \/>\n| 1 |<br \/>\n| 10 |<br \/>\n| 20 |<br \/>\n| 30 |<br \/>\n| 50 |<br \/>\n| 500 |<br \/>\n| 1000 |<br \/>\n| 3000 |<br \/>\n+&#8212;&#8212;&#8212;-+<\/p>\n<p>Le tri est fait de fa\u00e7on correcte. Si nous changeons le type de la donn\u00e9e en texte, et que nous trions \u00e0 nouveau.<br \/>\nRequ\u00eate: SELECT left(numbers, 11) as numbersSTR from table order by numbersSTR<br \/>\nNous obtenons ce r\u00e9sultat:<\/p>\n<p>+&#8212;&#8212;&#8212;&#8212;+<br \/>\n| NombresSTR |<br \/>\n+&#8212;&#8212;&#8212;&#8212;+<br \/>\n| 1 |<br \/>\n| 10 |<br \/>\n| 1000 |<br \/>\n| 20 |<br \/>\n| 30 |<br \/>\n| 3000 |<br \/>\n| 50 |<br \/>\n| 500 |<br \/>\n+&#8212;&#8212;&#8212;&#8212;+<\/p>\n<p>Ce r\u00e9sultat ne suit pas l&#8217;ordre math\u00e9matique des nombres. Dans le m\u00eame ordre d&#8217;id\u00e9e, si vous avez des nombres stock\u00e9s dans une champ text ou varchar, et que vous souhaitez les trier dans l&#8217;ordre croissant. Ce r\u00e9sultat sera surement mauvais.<br \/>\nRequ\u00eate: select number from (table) order by number;<\/p>\n<p>+&#8212;&#8212;&#8211;+<br \/>\n| Nombre |<br \/>\n+&#8212;&#8212;&#8211;+<br \/>\n| 1 |<br \/>\n| 10 |<br \/>\n| 2 |<br \/>\n| 3 |<br \/>\n| 4 |<br \/>\n| 5 |<br \/>\n| 6 |<br \/>\n| 7 |<br \/>\n| 8 |<br \/>\n| 9 |<br \/>\n+&#8212;&#8212;&#8211;+<\/p>\n<p>Pour palier ce probl\u00e8me, vous pouvez utiliser cette astuce.<br \/>\nRequ\u00eate: select number from (table) order by (number+0);<\/p>\n<p>+&#8212;&#8212;&#8211;+<br \/>\n| Nombre |<br \/>\n+&#8212;&#8212;&#8211;+<br \/>\n| 1 |<br \/>\n| 2 |<br \/>\n| 3 |<br \/>\n| 4 |<br \/>\n| 5 |<br \/>\n| 6 |<br \/>\n| 7 |<br \/>\n| 8 |<br \/>\n| 9 |<br \/>\n| 10 |<br \/>\n+&#8212;&#8212;&#8211;+<\/p>\n<p>Le r\u00e9sultat est celui attendu. (champ + 0 ) convertit le texte\/le caract\u00e8re en nombre. Ainsi le tri est fait correctement.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Triez un champ avec un tri num\u00e9rique et non sur les codes des caract\u00e8res en MySQL. Il est parfois utile de trier une liste d&#8217;enregistrement gr\u00e2ce \u00e0 un champ. Si ce champ contient des chiffres mais qu&#8217;il est d\u00e9fini comme un varchar. La fonction ORDER BY fera un mauvais tri. Cas classique et id\u00e9al: Type: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[31,80],"tags":[29],"class_list":["post-39","post","type-post","status-publish","format-standard","hentry","category-tips","category-fr","tag-mysql"],"_links":{"self":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":2,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/39\/revisions"}],"predecessor-version":[{"id":5081,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/39\/revisions\/5081"}],"wp:attachment":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/media?parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/categories?post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/tags?post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}