Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: FAQ: Выборка первой/последней записи в группах  [new]
miksoft
Member

Откуда:
Сообщений: 36313
MasterZiv
miksoft,

Перевод даты в формат не YYYYMMDD, или в любой формат с месяцем в виде названия.
Ну так подразумевалось использование правильного формата, а не абы какого. Тем более, что в MySQL формат по умолчанию для даты как раз является правильным.
26 фев 14, 10:31    [15630705]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33420
miksoft,

Просто вот это самое, что вы тут предлагаете, называется "нарушение доменной целостности данных".
26 фев 14, 10:53    [15630820]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
miksoft
Member

Откуда:
Сообщений: 36313
MasterZiv
С1 должно наверное быть
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
Да, похоже, что мы прошляпили...
Правлю в исходном посте.
26 фев 14, 21:14    [15635803]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17022
MasterZiv
С1 должно наверное быть
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



???
ваш запрос -- копия оригинала в первом сообшении.
Что не так?
6 апр 14, 23:58    [15840866]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
miksoft
Member

Откуда:
Сообщений: 36313
javajdbc,

miksoft
Правлю в исходном посте.
7 апр 14, 00:05    [15840876]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17022
javajdbc
MasterZiv
С1 должно наверное быть
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

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 хранить не надо.

Или это без разницы?
7 апр 14, 00:17    [15840901]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17022
MasterZiv
miksoft,

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


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

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

И а если кто этого не поймет и начнет сортировать названия месяцев,
то, по русски говоря "сдуру и пенис сломать можно"
а уж "целкостность домены" и подавно.
7 апр 14, 01:34    [15841020]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33420
javajdbc


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




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


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


Вот это оно самое и есть.
7 апр 14, 08:33    [15841206]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17022
MasterZiv,

ОК, поправка принимается -- этот метод можно использовать
ЗА ИСКЛЮЧЕНИЕМ типов данных которые не гарантируют
оригинальный порядок сортировки после преобразования
(например в строковую переменную)
и не гарантируют 100% возврат значения после преобразования обратно.
7 апр 14, 18:52    [15845642]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: FAQ: Выборка первой/последней записи в группах  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12594
  order by -p1.score, -p1.id 

Что за минусы?
10 фев 17, 09:30    [20199256]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
miksoft
Member

Откуда:
Сообщений: 36313
Hett
  order by -p1.score, -p1.id 


Что за минусы?
Это измнение знака числа.
По сути это DESC
  order by p1.score DESC, p1.id DESC
10 фев 17, 10:55    [20199598]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Выборка первой/последней записи в группах  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12594
Так и подумал, спасибо!
10 фев 17, 11:25    [20199713]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / MySQL Ответить