Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка результата запроса.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
-=1100=-
Отправлено: 29 Августа, 2011 - 11:53:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


Помог: 0 раз(а)

[+]


Есть ли возможность отсортировать результат запроса MySQL по "умному"

0,5
2
4
11
52



что то вроде natsort , толь желательно запрос или результат запроса MYSQL


-----
INSPIRON |6400
 
 Top
OrmaJever
Отправлено: 29 Августа, 2011 - 11:59:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




если тип поля int то имено так и сортирует


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 29 Августа, 2011 - 12:05:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




К сожалению, нет.
Запрос на добавление в MySQL сортировки по "натуральному алгоритму" - например,
CODE (htmlphp):
скопировать код в буфер обмена
  1. Scene 1
  2. Scene 1A
  3. Scene 1B
  4. Scene 2A
  5. Scene 3
  6. ...
  7. Scene 101
  8. Scene XXA1
  9. Scene XXA2

- был озвучен сообществом уже давно, однако (насколько я понимаю, из-за покупки компании Sun компанией Oracle) так и не реализовано.

С точки зрения SQL может подойти это:
CODE (SQL):
скопировать код в буфер обмена
  1. /**
  2.  * Returns a string formatted for natural sorting. This function is very useful when having to sort alpha-numeric strings.
  3.  *
  4.  * @author Alexandre Potvin Latreille (axp058)
  5.  * @param {nvarchar(4000)} string The formatted string.
  6.  * @param {int} numberLength The length each number should have (including padding). This should be the length of the longest number. Defaults to 10.
  7.  * @param {char(50)} sameOrderChars A list of characters that should have the same order. Ex: '.-/'. Defaults to empty string.
  8.  *
  9.  * @return {nvarchar(4000)} A string for natural sorting.
  10.  * Example of use:
  11.  *
  12.  *      SELECT Name FROM TableA ORDER BY Name
  13.  *  TableA (unordered)              TableA (ordered)
  14.  *  ------------                    ------------
  15.  *  ID  Name                    ID  Name
  16.  *  1.  A1.                 1.  A1-1.      
  17.  *  2.  A1-1.                   2.  A1.
  18.  *  3.  R1      -->         3.  R1
  19.  *  4.  R11                 4.  R11
  20.  *  5.  R2                  5.  R2
  21.  *
  22.  *  
  23.  *  As we can see, humans would expect A1., A1-1., R1, R2, R11 but that's not how SQL is sorting it.
  24.  *  We can use this function to fix this.
  25.  *
  26.  *      SELECT Name FROM TableA ORDER BY dbo.udf_NaturalSortFormat(Name, default, '.-')
  27.  *  TableA (unordered)              TableA (ordered)
  28.  *  ------------                    ------------
  29.  *  ID  Name                    ID  Name
  30.  *  1.  A1.                 1.  A1.    
  31.  *  2.  A1-1.                   2.  A1-1.
  32.  *  3.  R1      -->         3.  R1
  33.  *  4.  R11                 4.  R2
  34.  *  5.  R2                  5.  R11
  35.  */
  36. CREATE FUNCTION dbo.udf_NaturalSortFormat(
  37.     @string nvarchar(4000),
  38.     @numberLength int = 10,
  39.     @sameOrderChars char(50) = ''
  40. )
  41. RETURNS varchar(4000)
  42. AS
  43. BEGIN
  44.     DECLARE @sortString varchar(4000),
  45.         @numStartIndex int,
  46.         @numEndIndex int,
  47.         @padLength int,
  48.         @totalPadLength int,
  49.         @i int,
  50.         @sameOrderCharsLen int;
  51.  
  52.     SELECT
  53.         @totalPadLength = 0,
  54.         @string = RTRIM(LTRIM(@string)),
  55.         @sortString = @string,
  56.         @numStartIndex = PATINDEX('%[0-9]%', @string),
  57.         @numEndIndex = 0,
  58.         @i = 1,
  59.         @sameOrderCharsLen = LEN(@sameOrderChars);
  60.  
  61.     -- Replace all char that has to have the same order by a space.
  62.     WHILE (@i <= @sameOrderCharsLen)
  63.     BEGIN
  64.         SET @sortString = REPLACE(@sortString, SUBSTRING(@sameOrderChars, @i, 1), ' ');
  65.         SET @i = @i + 1;
  66.     END
  67.  
  68.     -- Pad numbers with zeros.
  69.     WHILE (@numStartIndex <> 0)
  70.     BEGIN
  71.         SET @numStartIndex = @numStartIndex + @numEndIndex;
  72.         SET @numEndIndex = @numStartIndex;
  73.  
  74.         WHILE(PATINDEX('[0-9]', SUBSTRING(@string, @numEndIndex, 1)) = 1)
  75.         BEGIN
  76.             SET @numEndIndex = @numEndIndex + 1;
  77.         END
  78.  
  79.         SET @numEndIndex = @numEndIndex - 1;
  80.  
  81.         SET @padLength = @numberLength - (@numEndIndex + 1 - @numStartIndex);
  82.  
  83.         IF @padLength < 0
  84.         BEGIN
  85.             SET @padLength = 0;
  86.         END
  87.  
  88.         SET @sortString = STUFF(
  89.             @sortString,
  90.             @numStartIndex + @totalPadLength,
  91.             0,
  92.             REPLICATE('0', @padLength)
  93.         );
  94.  
  95.         SET @totalPadLength = @totalPadLength + @padLength;
  96.         SET @numStartIndex = PATINDEX('%[0-9]%', RIGHT(@string, LEN(@string) - @numEndIndex));
  97.     END
  98.  
  99.     RETURN @sortString;
  100. END
  101.  
  102. GO

(источник http://stackoverflow.com/questions/153633/natural-sort-in-mysql)

Или использовать http://php.su/functions/?natsort


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
-=1100=-
Отправлено: 29 Августа, 2011 - 12:13:01
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


Помог: 0 раз(а)

[+]


Ой....
Какой запрос мудреный...
Я лучше тогда natsort .


-----
INSPIRON |6400
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB