powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неверная выборка
10 сообщений из 10, страница 1 из 1
Неверная выборка
    #39269350
есть кусок запроса ...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
inner join
									(
										SELECT `id`, `user`, STR_TO_DATE(`answer`, '%d-%m-%Y') AS `answer`, `event` 
												FROM (SELECT * FROM `results` WHERE `type` = 'date' ORDER BY STR_TO_DATE(`answer`, '%d-%m-%Y') DESC) AS `T` GROUP BY `user`
									) `rr`
									
									on 
										`rr`.`user` = `u`.`id`



Этот кусок выполняется, но проблема, мне надо выбрать данные с сортировкой, причем сортировка в FROM делается верно,
но результат основного запроса мне возвращает данные не отсортированные, мне надо выбрать последнюю свежую запись, а система выдает наоборот первую.

Я решил выполнить отдельно подзапросы, к примеру:

Код: sql
1.
SELECT * FROM `results` WHERE `type` = 'date' AND user = 138 ORDER BY STR_TO_DATE(`answer`, '%d-%m-%Y') DESC 



Получаю:
Дата звонка 02-07-2016 date
Дата звонка 28-04-2016 date
Дата звонка 06-12-2015 date

То есть в подзапросе у меня все корректно сортируется

Но когда я запускаю через inner join в результате он выдает не 02-07-2016, а 06-12-2015.
Скажите как решить данную проблему?
...
Рейтинг: 0 / 0
Неверная выборка
    #39269351
Если делаю уже вот так:
Код: sql
1.
SELECT `id`, `user`, STR_TO_DATE(`answer`, '%d-%m-%Y') AS `answer`, `event` FROM (SELECT * FROM `results` WHERE user = 138 AND `type` = 'date' ORDER BY STR_TO_DATE(`answer`, '%d-%m-%Y') DESC) AS `T`



То есть обернул запрос, то получаю не верно сортированный результат

Дата звонка 06-12-2015 date
Дата звонка 28-04-2016 date
Дата звонка 02-07-2016 date
...
Рейтинг: 0 / 0
Неверная выборка
    #39269354
Код: sql
1.
SELECT * FROM (SELECT * FROM `results` WHERE `type` = 'date' ORDER BY STR_TO_DATE(`answer`, '%d-%m-%Y') DESC) AS `T` WHERE user = 138 



Дает аналогичный вариант

Дата звонка 06-12-2015 date
Дата звонка 28-04-2016 date
Дата звонка 02-07-2016 date

И естественно при группировке я получаю Дата звонка 06-12-2015 date, а надо Дата звонка 02-07-2016 date
...
Рейтинг: 0 / 0
Неверная выборка
    #39269355
сразу скажу, что сделать дату типом а базе данных датой нет возможности
...
Рейтинг: 0 / 0
Неверная выборка
    #39269366
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питерский11сортировка в FROM делается верно,
но результат основного запроса мне возвращает данные не отсортированныеДык во внешнем (по отношению к рассматриваемому) SELECT'е, наверно, нет сортировки, а в таком случае порядок записей не гарантирован.

Кроме того, вложенность запросов тут явно лишняя.
...
Рейтинг: 0 / 0
Неверная выборка
    #39269372
Питерский11,

Ф.А.К. уже читал?
...
Рейтинг: 0 / 0
Неверная выборка
    #39269548
vkle,

Пробовал сортировку делать и во внешнем, при группировке такой же результат
...
Рейтинг: 0 / 0
Неверная выборка
    #39269562
Добрый Э - Эх,

К сожалению, что вы дали FAQ не подходит, мне нужно получить сортированный результат, все что там указано связано в max и min.
...
Рейтинг: 0 / 0
Неверная выборка
    #39269565
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортировка в подзапросе ИГНОРИРУЕТСЯ внешним запросом.
Чтобы получить вменяемый результат - необходимо из подзапроса получать требуемое поле сортировки и использовать его во внешнем запросе.

Посмотрите на свой подзапрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT `id`, `user`, STR_TO_DATE(`answer`, '%d-%m-%Y') AS `answer`, `event` 
FROM (SELECT * 
      FROM `results` 
      WHERE `type` = 'date' 
      ORDER BY STR_TO_DATE(`answer`, '%d-%m-%Y') DESC
) AS `T` 
GROUP BY `user`



Удалите из подзапроса сортировку - и НИЧЕГО не изменится:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT `id`, `user`, STR_TO_DATE(`answer`, '%d-%m-%Y') AS `answer`, `event` 
FROM (SELECT * 
      FROM `results` 
      WHERE `type` = 'date' 
) AS `T` 
GROUP BY `user`



Зато должно прийти понимание того, что запись для группы по user будет выбрана СЛУЧАЙНАЯ.

Чтобы гарантированно получить "самую свежую" запись, т.е. где STR_TO_DATE(`answer`, '%d-%m-%Y') максимально, нужно получить эту пару юзер-максимальная дата:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT `user`, MAX(STR_TO_DATE(`answer`, '%d-%m-%Y')) AS `answer`
FROM (SELECT * 
      FROM `results` 
      WHERE `type` = 'date' 
) AS `T` 
GROUP BY `user`


а затем присоединить к результату ещё одну копию таблицы и по паре значений (user, answer) получить соответствующие этой записи id и event. Да и то при условии, что эта пара гарантированно уникальна.
...
Рейтинг: 0 / 0
Неверная выборка
    #39269648
Спасибо все помогло
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неверная выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]