Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / MySQL |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] все |
miksoft Member Откуда: Сообщений: 38694 |
|
||
26 фев 14, 10:31 [15630705] Ответить | Цитировать Сообщить модератору |
MasterZiv Member Откуда: Питер Сообщений: 34659 |
miksoft, Просто вот это самое, что вы тут предлагаете, называется "нарушение доменной целостности данных". |
26 фев 14, 10:53 [15630820] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38694 |
Правлю в исходном посте. |
||
26 фев 14, 21:14 [15635803] Ответить | Цитировать Сообщить модератору |
javajdbc Member Откуда: Montreal Сообщений: 17715 |
??? ваш запрос -- копия оригинала в первом сообшении. Что не так? |
||
6 апр 14, 23:58 [15840866] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38694 |
javajdbc,
|
||
7 апр 14, 00:05 [15840876] Ответить | Цитировать Сообщить модератору |
javajdbc Member Откуда: Montreal Сообщений: 17715 |
Ок, я понял что запрос был модифицирован в оригинальном сообшении. Если не секрет, что имено было заменено? Сейчас выглядит логически верным, хотя я бы еше поставил 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] Ответить | Цитировать Сообщить модератору |
javajdbc Member Откуда: Montreal Сообщений: 17715 |
Предложеный метод -- довольно екзоотичный. Никто не предлагает его для повседневной работы. Если уж кто-то возмется -- так и проверку будет делать сам. Преобразование все равно надо делать в явном виде для многих видов (например, как было указано, числа надо добивать нулями слева). Вы правильно добавили время/даты в этот список. "нарушение доменной целостности данных" -- умные слова то какие. Никто ничего не нарушает и исходные данные не изменяются в базе. Времено, на лету, данные преобразуются в стринги и обратно. (пакуются и распоковываются). При этом специально указывается что надо найти способ сохранения порядка сортировки исходных данных. И а если кто этого не поймет и начнет сортировать названия месяцев, то, по русски говоря "сдуру и пенис сломать можно" а уж "целкостность домены" и подавно. |
||
7 апр 14, 01:34 [15841020] Ответить | Цитировать Сообщить модератору |
MasterZiv Member Откуда: Питер Сообщений: 34659 |
Слова не очень и умные, а смысл их простой — нельзя менять тип данных в процессе их обработки. Например, если ты преобразует float в varchar и потом обратно, ты потеряешь точность (будет погрешность), если ты склеишь два текстовых поля через разделитель, потом есть риск разделить их обратно неверно, разделитель может уже был в одном из полей.
Вот это оно самое и есть. |
||||
7 апр 14, 08:33 [15841206] Ответить | Цитировать Сообщить модератору |
javajdbc Member Откуда: Montreal Сообщений: 17715 |
MasterZiv, ОК, поправка принимается -- этот метод можно использовать ЗА ИСКЛЮЧЕНИЕМ типов данных которые не гарантируют оригинальный порядок сортировки после преобразования (например в строковую переменную) и не гарантируют 100% возврат значения после преобразования обратно. |
7 апр 14, 18:52 [15845642] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Hett Member Откуда: Бийск, Новосибирск Сообщений: 13638 |
order by -p1.score, -p1.id Что за минусы? |
10 фев 17, 09:30 [20199256] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38694 |
По сути это DESC order by p1.score DESC, p1.id DESC |
||
10 фев 17, 10:55 [20199598] Ответить | Цитировать Сообщить модератору |
Hett Member Откуда: Бийск, Новосибирск Сообщений: 13638 |
Так и подумал, спасибо! |
10 фев 17, 11:25 [20199713] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] все |
Все форумы / MySQL | ![]() |