Как выбрать строку на определенное количество похожих данных

Я собираюсь создать какую-то функцию или запрос, где я могу проверить, существует ли определенная запись в базе данных. Применяются следующие правила:

  • Таблица имеет 6 столбцов
  • Мой еще не построенный запрос имеет доступ к полному объекту строки (все 6 значений)
  • Этот запрос должен найти каждую строку с как минимум 4 из 6 соответствующих значений из объекта, который я передал
  • Использование MySQL

Можно ли построить такой запрос? Моя цель состоит в том, чтобы иметь функцию, которая может возвращать true, если есть вероятность, что строка, подобная переданному объекту, уже существует в базе данных.

Является ли мой единственный вариант сделать запрос с несколькими операторами where (где я пробую для каждой комбинации 4 разных значения)?

псевдо:

function getSimilarRow(Row_Object $row)
{
    //select *
    //from table_x
    //where 4 out of 6 properties from object $row apply
}

1 ответ

Решение

Вы могли бы использовать case statement в предложении where для каждого свойства, которое вы пытаетесь сопоставить. Если он соответствует критериям, тогда укажите в описании дела значение 1; если не получится 0, Сумма дел должна быть >= 4,

Я не очень знаком с MySQL, но сработает следующее (я запустил быстрый SQL Fiddle, чтобы показать, как он работает):

select * from SomeTable where 
(case when propertyOne = 'value1' then 1 else 0 end) +
(case when propertyTwo = 'value2' then 1 else 0 end) +
(case when propertyThree = 'value3' then 1 else 0 end) +
(case when propertyFour = 'value4' then 1 else 0 end) +
(case when propertyFive = 'value5' then 1 else 0 end) +
(case when propertySix = 'value6' then 1 else 0 end) >= 4

Очевидно, что вы можете изменить свою логику в каждом предложении, если вы предпочитаете, чтобы они были like с или что-нибудь. Вы можете даже применить взвешивание к каждому столбцу, используя что-то, кроме 1 если вам нужно было по-настоящему креативно.

Другие вопросы по тегам