powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FAQ: Выборка первой/последней записи в группах
12 сообщений из 37, страница 2 из 2
FAQ: Выборка первой/последней записи в группах
    #38572513
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmiksoft,

Перевод даты в формат не YYYYMMDD, или в любой формат с месяцем в виде названия.Ну так подразумевалось использование правильного формата, а не абы какого. Тем более, что в MySQL формат по умолчанию для даты как раз является правильным.
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38572559
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Просто вот это самое, что вы тут предлагаете, называется "нарушение доменной целостности данных".
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38573536
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivС1 должно наверное быть
Код: sql
1.
2.
3.
4.
5.
6.
select u.id,name,topic,score from (
     select p1.user_id, max(p1.score) max_score 
       from post p1
      group by p1.user_id ) zz
  join post p on zz.max_score=p.score and zz.user_id = p.user_id
  join user u on u.id=p.user_id

Да, похоже, что мы прошляпили...
Правлю в исходном посте.
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38606753
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivС1 должно наверное быть
Код: sql
1.
2.
3.
4.
5.
6.
select u.id,name,topic,score from (
     select p1.user_id, max(p1.score) max_score 
       from post p1
      group by p1.user_id ) zz
  join post p on zz.max_score=p.score and zz.user_id = p.user_id
  join user u on u.id=p.user_id




???
ваш запрос -- копия оригинала в первом сообшении.
Что не так?
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38606756
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

miksoftПравлю в исходном посте.
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38606759
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcMasterZivС1 должно наверное быть
Код: sql
1.
2.
3.
4.
5.
6.
select u.id,name,topic,score from (
     select p1.user_id, max(p1.score) max_score 
       from post p1
      group by p1.user_id ) zz
  join post p on zz.max_score=p.score and zz.user_id = p.user_id
  join user u on u.id=p.user_id




???
ваш запрос -- копия оригинала в первом сообшении.
Что не так?

Ок, я понял что запрос был модифицирован в оригинальном сообшении.
Если не секрет, что имено было заменено?

Сейчас выглядит логически верным, хотя я бы еше поставил
STRAIGHT_JOIN оба раза и в последней строчке
заджоинил бы на zz.user_id

Код: sql
1.
2.
3.
4.
5.
6.
select u.id,name,topic,score from (
     select p1.user_id, max(p1.score) max_score 
       from post p1
      group by p1.user_id ) zz
  STRAIGHT_JOIN post p on zz.max_score=p.score and zz.user_id = p.user_id
  STRAIGHT_JOIN user u on u.id=zz.user_id



логика --

1. недопустить попыток оптимизатора начать НЕ с агрегата,
и таким образом НЕ использовать индексы.

2. точный способ жоинта я не знаю, но p.user_id нужен
только на связку и не нужен в конечном результате.

в варинате
join user u on u.id=p.user_id
мускл обязан выбрать и сохранить это значение.

в варинате
[STRAIGHT_] JOIN user u on u.id=zz.user_id
p.user_id хранить не надо.

Или это без разницы?
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38606779
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmiksoft,

Просто вот это самое, что вы тут предлагаете, называется "нарушение доменной целостности данных".

Предложеный метод -- довольно екзоотичный.
Никто не предлагает его для повседневной работы.
Если уж кто-то возмется -- так и проверку будет делать сам.
Преобразование все равно надо делать в явном
виде для многих видов
(например, как было указано, числа надо добивать нулями слева).
Вы правильно добавили время/даты в этот список.

"нарушение доменной целостности данных" -- умные слова то какие.
Никто ничего не нарушает и исходные данные не изменяются
в базе. Времено, на лету, данные преобразуются в стринги и обратно.
(пакуются и распоковываются). При этом специально указывается
что надо найти способ сохранения порядка сортировки исходных данных.

И а если кто этого не поймет и начнет сортировать названия месяцев,
то, по русски говоря "сдуру и пенис сломать можно"
а уж "целкостность домены" и подавно.
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38606843
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc

"нарушение доменной целостности данных" -- умные слова то какие.




Слова не очень и умные, а смысл их простой — нельзя менять тип данных в процессе их обработки. Например, если ты преобразует float в varchar и потом обратно, ты потеряешь точность (будет погрешность), если ты склеишь два текстовых поля через разделитель, потом есть риск разделить их обратно неверно, разделитель может уже был в одном из полей.


javajdbcНикто ничего не нарушает и исходные данные не изменяются
в базе. Времено, на лету, данные преобразуются в стринги и обратно.
(пакуются и распоковываются). При этом специально указывается
что надо найти способ сохранения порядка сортировки исходных данных.


Вот это оно самое и есть.
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #38607615
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

ОК, поправка принимается -- этот метод можно использовать
ЗА ИСКЛЮЧЕНИЕМ типов данных которые не гарантируют
оригинальный порядок сортировки после преобразования
(например в строковую переменную)
и не гарантируют 100% возврат значения после преобразования обратно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Выборка первой/последней записи в группах
    #39402025
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
  order by -p1.score, -p1.id 


Что за минусы?
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #39402086
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Код: sql
1.
  order by -p1.score, -p1.id 



Что за минусы?Это измнение знака числа.
По сути это DESC
Код: sql
1.
  order by p1.score DESC, p1.id DESC
...
Рейтинг: 0 / 0
FAQ: Выборка первой/последней записи в группах
    #39402117
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и подумал, спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FAQ: Выборка первой/последней записи в группах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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