|
|
|
| Скажите пожалуйста, как можно корректно отсортировать результирующий массив по нужному полю, если выборка осуществляется с подобным условием:
SELECT * FROM `catalog` WHERE (`category` =22 OR `category` =23) ORDER BY `price`
|
Дело в том, что сначала сортируются все записи с категорией 22, а потом с категорией 23, получается фигня. Можно ли как-то отсортировать все сразу? Может быть уже в скрипте? | |
|
|
|
|
|
|
|
для: Петр
(10.09.2007 в 09:29)
| | >Дело в том, что сначала сортируются все записи с категорией 22, а потом с категорией 23,
Да нет же. И с начала и с конца все записи сортируются именно как указано в ORDER BY.
И даже выбираются они в пестром беспорядке.
Хотите полной сортировки - указывайте в ORDER BY два поля через запятую. | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2007 в 09:40)
| | Ну да по логике должно так и быть, но не получается почему-то
SELECT * FROM `catalog` WHERE (`category` =22 OR `category` =23) ORDER BY `price` , `category`
|
Выводится беспорядочно... что же делать?
П.С. Дело в том, что тип поля price - varchar (т.к. может содержать запись типа 100/150руб.) | |
|
|
|
|
|
|
|
для: Петр
(10.09.2007 в 09:56)
| | >Дело в том, что тип поля price - varchar (т.к. может содержать запись типа 100/150руб.)
не может она такого содержать.
не может такое поле иметь нечисловой тип. | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2007 в 10:02)
| | Я все понял, поле price сортируется как текст
105
1350
280
3900
417
Есть ли какая-нибудь функция которая в запросе преобразует тип в числовой, типа
SELECT * FROM `catalog` WHERE (`category`=22 OR `category`=23) ORDER BY int(`price`), `category`
|
| |
|
|
|
|
|
|
|
для: Петр
(10.09.2007 в 10:06)
| | Все разобрался, спасибо за содействие :)
Надо воспользоваться функцией приведения типов (из текстового в числовой)
CAST('поле' AS type) или CONVERT('поле', type)
SELECT * FROM `catalog` WHERE (`category`=22 OR `category`=23) ORDER BY CAST(`price` AS SIGNED), `category`
|
| |
|
|
|