IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Нестандартная сортировка mysql (https://www.imho.ws/showthread.php?t=111715)

Face 26.11.2006 16:34

Нестандартная сортировка mysql
 
Есть такая структура таблицы:
Код:

CREATE TABLE `123` (
  `id` int(11) NOT NULL auto_increment,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=6 ;

INSERT INTO `123` VALUES (1, '10. Текст');
INSERT INTO `123` VALUES (2, '2. Текст');
INSERT INTO `123` VALUES (3, '1. Текст');
INSERT INTO `123` VALUES (4, '11. Текст');
INSERT INTO `123` VALUES (5, '20. Текст');

Возможно ли сделать mysql-запрос, чтобы записи вышли в таком порядке: "1. Текст", "2. Текст", "10. Текст", "11. Текст", "20. Текст"?

Merlin Cori 26.11.2006 21:26

Вложений: 1
Так нельзя.
Можно так:
PHP код:

CREATE TABLE `124` (
  `
idint(11NOT NULL auto_increment,
  `
numint(11NOT NULL,
  `
texttext NOT NULL,
  
PRIMARY KEY  (`id`)
AUTO_INCREMENT=;

INSERT INTO `124VALUES (110'10. Текст');
INSERT INTO `124VALUES (22'2. Текст');
INSERT INTO `124VALUES (31'1. Текст');
INSERT INTO `124VALUES (411'11. Текст');
INSERT INTO `124VALUES (520'20. Текст'); 

и, соответственно, запрос будет выглядеть так:

PHP код:


SELECT 
FROM `124ORDER BY inet_aton(num

и результат выполнения запроса будет нужным

ЕЖ 26.11.2006 22:13

Можно попробовать и не менять текущую структуру, если в ORDER BY добавлять лидирующих нулей/пробелов, и обрезать результат справа до равной длины строк. Что то вроде ORDER BY RIGHT('0000000000'+text, 100).

max2k1 27.11.2006 20:05

А не проще ли вот так:
PHP код:

select from `123order by 0+text 

Если text всегда будет начинаться с /^\d\./ - все будет успешно сортироваться

Код:

mysql> select * from `123` order by 0+text;
+----+-----------+
| id | text      |
+----+-----------+
|  3 | 1. Текст  |
|  2 | 2. Текст  |
|  1 | 10. Текст |
|  4 | 11. Текст |
|  5 | 20. Текст |
+----+-----------+
5 rows in set (0.01 sec)


<Descriptor> 28.11.2006 22:25

А можно ли сортировать по полю с текстом (в котором html-код) так, чтобы теги не учитывались, а учитывался только сам текст?

Hubbitus 28.11.2006 23:05

<Descriptor>, можно, но медленно и большая нагрузка будет, поэтому лучше не надо. Сортируй по полю, в котором теги вырезаны, регулярные выражения для этого поддерживаются http://mysql.org/doc/refman/5.1/en/regexp.html

И вообще, какой в этом может быть практический смысл??

<Descriptor> 29.11.2006 02:09

О, спасибо. А регулярные выражения только начиная с 5й версии действуют? Или для 4й тоже можно использовать?

Hubbitus 29.11.2006 13:22

Да в 3.х уже были, боюсь соврать, но вроде изначально http://mysql.org/doc/refman/4.1/en/regexp.html


Часовой пояс GMT +4, время: 11:25.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.