Как выбрать строку на определенное количество похожих данных
Я собираюсь создать какую-то функцию или запрос, где я могу проверить, существует ли определенная запись в базе данных. Применяются следующие правила:
- Таблица имеет 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
если вам нужно было по-настоящему креативно.