Запросы внутри запросов с использованием MySQL - PullRequest
2 голосов
/ 06 мая 2011

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

  • Если в заголовке столбца указано «Олимпиада в Пекине», к баллу добавляется 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 Ответ

1 голос
/ 06 мая 2011

Вы, вероятно, хотите использовать 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

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

РЕДАКТИРОВАТЬ: Также обратите внимание, что это соответствует для точного значения.

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