Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307

Двойная сортировка в ORDER BY

17.03.2020, 21:11. Показов 1637. Ответов 9

Студворк — интернет-сервис помощи студентам
Есть SQL-запрос к базе на выборку по двум полям, в первом выбирается несколько конкретных записей и делается сортировка по убыванию, во 2-м просто сортировка по возрастанию.
Таблица допустим такая:
param1 | param2
1 | 5
3 | 3
3 | 1
2 | 4
3 | 2
Если рассматривать чисто сортировку 2-х столбцов, то должно на выходе дать вот так:
param1 | param2
3 | 1
3 | 2
3 | 3
2 | 4
1 | 5
Но оно первый столбец сортирует по убыванию, а 2-й не сортирует по возрастанию вообще! В чём проблема?
PHP
1
2
3
4
$in_params - заранее подготовлена для связки плейсхолдеров
$sql = "SELECT * FROM table WHERE `param1` IN (:id0,:id1,:id2)  ORDER BY  `param1` DESC,  `param2` ASC"
$stmt = $pdo->prepare($sql);
$stmt->execute($in_params);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2020, 21:11
Ответы с готовыми решениями:

PHP и MySQL. Сортировка ORDER BY
На главной странице есть кнопки, обрабатывающие один и тот же запрос, но с разным условием поиска (select id, name from table...

ORDER BY с несколькими полями, сортировка в разные стороны
такой вариант не подходит SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC он берет только первый...

Двойная сортировка
Всем привет. Уже два дня разгребаю за одним "хорошим" верстальщиком. Есть страница "Афиша" у бара, которая выводит трансляции,...

9
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
18.03.2020, 09:41
Цитата Сообщение от Wolver Посмотреть сообщение
а 2-й не сортирует по возрастанию вообще!
Покажите пример возвращаемых данных. И заодно код вывода на экран, если выводите через PHP.
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
18.03.2020, 15:13  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Покажите пример возвращаемых данных. И заодно код вывода на экран, если выводите через PHP.
Jodah, я динамически формирую строку $sql.
2-я строка в приведеном в шапке поста коде - это то, что я вижу по дебагу в phpstorm'e, а сам код выглядит вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        try
        {
            $sql = "SELECT * FROM $table WHERE $full_str $full_sort";
            $stmt = $pdo->prepare($sql);
            $stmt->execute($in_params);
 
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $res[] = $row;
            }
        }
        catch (\PDOException $e)
        {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
Код работает, отрабатывает WHERE IN выбирая только те записи, которые я указал в массиве и сортирует по DESC для 1-го столбца, а вот сортировка по ASC для 2-го - не производится почему-то, хотя я вроде написал правильно SQl-запрос, и оно не падает в catch.
p.s.: в базе оба столбца varchar(255) если эта инфа нужна.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
18.03.2020, 15:38
Wolver, покажите, как $full_sort формируется.
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
18.03.2020, 20:08  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Wolver, покажите, как $full_sort формируется.
Jodah, вот код:
PHP
1
2
3
4
5
            $full_sort = "";
            foreach ($sort as $key => $value)
                $full_sort = $full_sort . $value;
            $full_sort = rtrim($full_sort, ", ");
            $full_sort = $sort_order_by . $full_sort;
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
18.03.2020, 20:51
Wolver, вроде не вижу проблем. Покажите, какие данные этот запрос возвращает. В 1-ом посте вы показали пример данных и как он должен сортироваться, осталось понять, в каком порядке данные возвращаются сейчас.
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
18.03.2020, 21:52  [ТС]
Jodah, дык и я не вижу(
Цитата Сообщение от Jodah Посмотреть сообщение
вроде не вижу проблем.
вот я формирую JSON со стороны сервера:
PHP
1
echo json_encode($res);
вот приходит JSON-строка на клиент:
zzz.txt
если открыть и проклацать по Ctrl+F по слову "grade" - 3-4 первых значения, то видно, что они сортированны по убыванию, а связанное с ним поле "value", которое следом идёт - не сортируется по возростанию.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
18.03.2020, 22:01
Походу проблема действительно в VARCHAR. Если поменять тип нельзя, то 2 варианта из гугла:
SQL
1
ORDER BY CONVERT(`column`, DECIMAL)
SQL
1
ORDER BY CAST(`column` AS DECIMAL)
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
18.03.2020, 23:25  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Если поменять тип нельзя, то 2 варианта из гугла:
Jodah, А подскажите, пожалуйста, как будет в таком случае идти DESC/ASC?
Вот так?
SQL
1
... ORDER BY CAST(`column1` AS DECIMAL) DESC, CAST(`column2` AS DECIMAL) ASC
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
19.03.2020, 07:27
Wolver, да

Добавлено через 1 минуту
Wolver, хотя у вас же первое поле - строка, типа '1,2,3,4', её приводить к числу не нужно. Значит будет так:

SQL
1
ORDER BY `column1` DESC, CAST(`column2` AS DECIMAL) ASC
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2020, 07:27
Помогаю со студенческими работами здесь

Двойная сортировка многомерного массива
Добрый день Помогит пожалуйста с сортировкоой есть массив $massa = array( array('name'=>'1', 'score'=>152), ...

Двойная сортировка массива
Добрый день. Помогите понять ошибку: Есть массив вида array ( 0 => array ( 'ID' => 112, 'AMOUNT' =>...

HSQL запрос. Что не так? "from hiberdata.Order order where order.clientId=?"
public List loadOrdersByClientId(Integer clientId) { return getHibernateTemplate().find( 'from hiberdata.Order order where...

Двойная сортировка
Нужно написать код чтобы сортировались элементы, стоящие на четных местах по возрастанию, а на нечетных местах по убыванию. Как я поняла,...

двойная сортировка
Необходимо отсортировать массив, как показано на рисунке, используя класс/структуру с двумя переменными а (левая колонка) и б (правая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru