Запросы внутри запросов с использованием MySQL


Я пытаюсь упорядочить Результаты поиска более точно. Я указываю строку поиска-например, "Олимпиада в Пекине"

  • Если колонка заголовка содержит "Олимпийские игры в Пекине", то счет 100 добавляется к счету, в противном случае ничего не добавляется
  • Если столбец shortDescription содержит "Олимпиада в Пекине", то к счету добавляется 50, в противном случае ничего не добавляется
  • Если столбец longDescription содержит "Олимпийские игры в Пекине", то к счету добавляется 10, в противном случае ничего не добавляется. добавлено

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

Ниже, безусловно, неправильно, но это должно проиллюстрировать, чего я надеюсь достичь!

SELECT 
    title, 
    id, 
    (
    IF((match 'Beijing Olympics' against title)*100) + 
    IF((match 'Beijing Olympics' against shortDescription)*50) + 
    IF((match 'Beijing Olympics' against longDescription)*10)
    ) as score 
from listings 
order by score desc limit 10
1   2   2011-05-06 20:00:51

1 ответ:

Вы, вероятно, хотите использовать CASE
http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

В остальном я думаю, что ваша логика выбора в порядке.

SELECT 
    title
    ,id
    ,(
        (CASE WHEN title LIKE '%Beijing Olympics%' THEN 100 ELSE 0 END) 
        + (CASE WHEN shortDescription LIKE '%Beijing Olympics%' THEN 50 ELSE 0 END) 
        + (CASE WHEN longDescription LIKE '%Beijing Olympics%' THEN 10 ELSE 0 END) 
     ) AS score 
FROM 
    listings 
ORDER BY 
    score desc 
LIMIT 10

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

EDIT: Также обратите внимание, что это соответствует точному значению.