2015-01-28 2 views
0

У меня есть таблица с полями с нулевым значением, которые я использую в качестве критериев поиска, и creation_date для сортировки по.Как найти новейшую совпадающую запись в MySQL, когда все мои критерии поиска могут быть пустыми?

Я пытаюсь написать запрос, чтобы найти новейшую запись на основе этих критериев поиска, но если один из них отсутствует, я бы хотел по-прежнему соответствовать ему.

Так что я пытался делать fieldname = ? or null для каждого поля и используется order by creation_date limit 1, но если я сделаю это, то, если бы существовал ряд, где все поля были null, было бы вернуть, что один вместо старой записи, где они не все null.

Как я могу заставить его предпочитать результаты с большим количеством совпадающих полей, но не требует, чтобы каждое поле существовало?

+0

Почтовые репрезентативные данные образца и желаемый результат. –

ответ

0

Пожалуйста, попробуйте что-то вроде следующего:

SELECT 
    {field list} 
FROM 
    {your table} 
WHERE 
    IFNULL(field1, @par1) = @par1 
    AND IFNULL(field2, @par2) = @par2 
    ..... 
ORDER BY 
    creation_date DESC 
limit 1 

В приведенном выше случае, если есть field1 имела значение NULL для конкретной записи, IFNULL функция будет возвращать второй параметр, задаваемый, поэтому реальное сравнение в этом случае будет @par1 = @par1, что всегда верно. Таким образом, в случае NULL-значного поля часть не влияет на результаты поиска.

Я надеюсь, что это поможет.

Смежные вопросы