Помогите понять этот запрос MySQL с помощью ORDER BY и CASE - PullRequest
4 голосов
/ 10 мая 2011

Я пытаюсь понять этот запрос mySQL.Предположительно, он выполняет поиск в таблице «items» с ключевым словом search «ленивая собака коричневой лисы» и возвращает результат в зависимости от его релевантности или количества совпадений в записях.

SELECT *
FROM `items`
WHERE `description` LIKE 'quick'
AND (
  `description` LIKE 'brown'
  OR `description` LIKE 'fox'
  OR `description` LIKE 'lazy'
  OR `description` LIKE 'dog'
)
ORDER BY (
  (
    CASE WHEN `description` LIKE 'brown'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'fox'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'lazy'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'dog'
    THEN 1
    ELSE 0
    END
  )
) DESC
LIMIT 0, 30

Часть, которую я не понимаюявляется частью в предложениях ORDER BY и CASE.Скажем, конкретная запись соответствует всем 4 ключевым словам в поиске, мы получим ORDER BY (4)?Как это 4 связано с рассматриваемой строкой?Я понимаю, что ORDER BY обычно используется в столбце, а не в числе?Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

ORDER BY может использоваться для любого значения, полученного из полей в каждой строке.В этом случае мы упорядочиваем количество важных слов, появляющихся в поле description.Итак, как вы говорите, если конкретная запись соответствует всем 4 ключевым словам, то она получает 4 и попадает в верхнюю часть (нисходящего) порядка.Если запись соответствует только одному из ключевых слов, она получает 1 и заканчивается в конце.Вы даже можете сказать ORDER BY RAND (), что делает именно то, что вы ожидаете.ORDER BY RAND () LIMIT 1 - очень распространенная идиома для случайного выбора одной строки из таблицы.Однако не используйте ORDER BY RAND () LIMIT 1 для больших таблиц, поскольку он по-прежнему генерирует случайное число для каждой строки (очень дорого), чтобы просто определить, какая из них самая маленькая.

0 голосов
/ 02 февраля 2018

Этот запрос используется для упорядочения по элементам, скажем, по 'релевантности' ...

Порядок по частям будет, например, если описание похоже на '% dog%', порядок по примет 1 иесли то же описание содержит «ленивый» порядок, то будет 1 + 1;это означает, что в текущей строке было два ключевых слова «собака» и «ленивый».и т. д.

Этот запрос упорядочивает элементы по «описанию, которое содержит максимум ключевого слова», поэтому, если запись строки соответствует всем 4 ключевым словам, она получает 4 и заканчивается в верхней части(нисходящий) порядок.Если запись строки соответствует только одному из ключевых слов, она получает 1 и заканчивается в конце.

0 голосов
/ 10 мая 2011

число здесь относится к столбцу, который будет использоваться для упорядочивания результатов, первый столбец будет 1.
не могу найти ссылку на это онлайн, но я обнаружил это случайно, и иногда это бывает полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...