Странная проблема с индексацией

  • Автор темы Евгений Воробьёв2
  • 52
  • Обновлено
  • 13, May 2024
  • #1
У меня есть база данных с произведениями классической музыки.

Он имеет три соответствующих поля: композитор, каталог и короткое имя.

Каталог содержит номера опусов, дополненные пробелами слева для удобства сортировки.

При отсутствии номера опуса поле пустое.

Меня озадачивает порядок пустых полей.

Как будто происходит какая-то скрытая сортировка. Когда я «выбираю * из произведений, где композитор = X ORDER BY», я получаю записи в идеальном порядке. Однако когда я делаю «ORDER BY Cataloga, Shortname», он учитывает только первый символ короткого имени.

Внутри каждого персонажа порядок кажется случайным, хотя всегда один и тот же.

Также странно то, что когда я ЗАКАЗЫВАЮ ПО просто каталогу, я получаю точно такой же результат в записях с пустым каталогом - хотя он не хранится таким образом в базе данных. Что может вызвать такое поведение?

Евгений Воробьёв2


Рег
02 Sep, 2012

Тем
1

Постов
1

Баллов
11
  • 08, Jun 2024
  • #2
Каков тип данных поля каталога?

Поскольку вы храните в нем номер, вам следует использовать для этого тип INT и сохранять ноль, когда номер опуса недоступен.

Тогда сортировка будет такой:

1, 4, 7, 10, 11...

Если вы храните числа, заполненные слева, в поле CHAR или VARCHAR, сортировка не произойдет должным образом.

В этом случае это будет так:

1, 10, 11, 4, 7...

Вот несколько решений, но ни одно из них не является полным доказательством.

В какой-то момент все они дадут неожиданные результаты.
https://stackoverflow.com/questions/8557172/mysql-order-by-sorting-alphanumeric-correctly
 

sitis15


Рег
17 Mar, 2014

Тем
2

Постов
3

Баллов
23
  • 08, Jun 2024
  • #3
Сортировка поля каталога не является проблемой.

Это буквенно-цифровое поле (есть «номера» опусов, такие как 4a, 77II и WoO59), и решение работает для меня.

И оставили дополненные значения, например "1", "5", "15", "62", "234" рабочийсок. Уникального поля идентификатора нет.

Вместо этого композитор, каталог и короткое имя вместе образуют уникальный первичный ключ. Когда я экспортирую структуру, я получаю следующее определение для этих трех полей:
 shortname
varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 composer
varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
 cataloga
varchar(18) COLLATE utf8_unicode_ci NOT NULL,
 

Andrew25


Рег
02 Feb, 2011

Тем
0

Постов
26

Баллов
26
  • 13, Jun 2024
  • #4
Я создал макет вашего стола на сайте http://sqlfiddle.com/#!9/26ecef/1

Я музыкально неграмотен, поэтому мои данные совпадают с тем, что, как я думаю, вы делаете, но я не совсем уверен.

Мы начнем с левого заполнения ваших данных.

Правильно ли я это понял?

Если это текст и вы собираетесь его сортировать, почему вы оставляете отступы?

но даже если да, и вас невозможно отговорить, сортировка все равно работает так, как ожидалось

Лучший способ двигаться дальше — иметь несколько примеров данных столбца вашего каталога и то, как вы ожидаете их сортировать.
 

mnogoland


Рег
22 May, 2015

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно