|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
Всем привет. что-то у меня глюк с сортировкой в mysql, не могу понять что не так: есть 2 запроса : SELECT id FROM 2020_medicine WHERE id_region=1 AND status=1 ORDER BY rate_summ DESC LIMIT 0,12; SELECT id FROM 2020_medicine WHERE id_region=1 AND status=1 ORDER BY rate_summ DESC LIMIT 12,12; Которые должны выводить id не повторяющиеся вроде как. но на деле во второй выборке встречаются id из первой выборки, что не должно быть. почему так? что за глюк? id - int AUTO_INCREMENT первичный id_region - int status - tinyint rate_summ decimal(4,1) индекс id_region + status PS. Версия сервера: 10.3.31-MariaDB-0ubuntu0.20.04.1 , Версия клиента базы данных: libmysql - mysqlnd 7.4.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 09:11 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
вот 2 запроса , красным выделены повторы ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 09:16 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
Показанный вывод вообще не соответствует запросу. Что ставит под сомнение весь вопрос... Попробуйте воспроизвести проблему на online fiddle. Скажем, тут: https://dbfiddle.uk/?rdbms=mariadb_10.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 09:23 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
Akina, извините, начинающий, по вашей ссылке не понятно что делать. а что именно не понятно из вопроса? есть 2 запроса, где ID не не должны повторятся, т.к. они auto_increment, LIMIT Х задан , откуда могут взяться повторы? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 09:34 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
ставлю эксперименты, если делаю ORDER BY name ASC (сортировка по полю varchar) - все работает как надо, выводит без повторов. может я как то не правильно понимаю rate_summ decimal(4,1) ? задача была записать число с десятичной (одна цифра после запятой) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 09:46 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
hibinyru по вашей ссылке не понятно что делать. Добавить свои структуру, данные, запрос... и дать ссылку. Скажем, как тут: https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=f4e20de3ac5eb04b1231546fa3c924d9 PS. Есть подозрение, что поле id ни разу не уникальное... замените в своих запросах SELECT id на SELECT *. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:06 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
добавьте в выборку поле rate_summ, станет понятнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:06 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
Диклевич Александр, Akina, спасибо. дело оказалось в том что rate_summ одинаковые, добавил в сортировку по id : ORDER BY rate_summ DESC , id ASC LIMIT xx. все заработало. Я извиняюсь, несколько лет был уверен что конструкция LIMIT XX не выводит повторения если даже ORDER xx повторяются. Проблема решена, правда через костыль. Спасибо всем за время :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:11 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
hibinyru был уверен что конструкция LIMIT XX не выводит повторения если даже ORDER xx повторяются. Для удаления повторений существует DISTINCT. hibinyru правда через костыль. Нет тут никакого костыля. Просто исходный запрос - недетерминированный, а исправленный - вероятно, детерминированный (при условии что нет полных дубликатов, по обоим полям). Вообще, если нужен определённый порядок, то выражение в ORDER BY должно быть таким, чтобы для каждой записи его значение было уникальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:17 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
hibinyru Диклевич Александр, Akina, спасибо. дело оказалось в том что rate_summ одинаковые, добавил в сортировку по id : ORDER BY rate_summ DESC , id ASC LIMIT xx. все заработало. Я извиняюсь, несколько лет был уверен что конструкция LIMIT XX не выводит повторения если даже ORDER xx повторяются. Проблема решена, правда через костыль. Спасибо всем за время :) А с чего Вы так решили, что LIMIT исключает повторения?! LIMIT просто берет записи из выборки, сформированной запросом. Ваш запрос сортирует выборку по неуникальному полю - в доке написано, что при совпадении значений поля сортировки взаимное расположение записей с дубликатами не определено. Это значит, что при каждой сортировке их порядок следования может менятся. Т.е., во втором запросе выборка была отсортирована не так, как в первом. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 01:41 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
Akina hibinyru был уверен что конструкция LIMIT XX не выводит повторения если даже ORDER xx повторяются. Для удаления повторений существует DISTINCT. hibinyru правда через костыль. Нет тут никакого костыля. Просто исходный запрос - недетерминированный, а исправленный - вероятно, детерминированный (при условии что нет полных дубликатов, по обоим полям). Вообще, если нужен определённый порядок, то выражение в ORDER BY должно быть таким, чтобы для каждой записи его значение было уникальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 13:05 |
|
При SELECT LIMIT есть повторения
|
|||
---|---|---|---|
#18+
OlegROA Ваш запрос сортирует выборку по неуникальному полю - в доке написано, что при совпадении значений поля сортировки взаимное расположение записей с дубликатами не определено. Говоря иначе, запрос с сортировкой по неуникальному выражению детерминированный с точностью до набора записей, но недетерминированный с точностью до их взаиморасположения. А потому, если к такому выходному набору применить LIMIT так, что он "рассекает" группу записей с одинаковым значением выражения сортировки, то не определено, какая часть окажется "слева" от точки рассечения, а какая "справа". Также не определено и не гарантируется повторность взаимного расположения записей в группе, а потому при следующем выполнении того же запроса взаиморасположение записей в группе может измениться. И соответственно изменятся поднаборы записей, оставшихся "слева" и "справа". Что может привести (и скорее всего приведёт) к тому, что какая-то запись попадёт в каждый из двух выходных поднаборов, какая-то только в один, а какая-то и ни разу не будет выдана. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 13:41 |
|
|
start [/forum/topic.php?fid=47&msg=40129473&tid=1827801]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 272ms |
0 / 0 |