#sql #search #sorting #sql-order-by
#sql #Поиск #сортировка #sql-порядок по
Вопрос:
Я создаю пользовательский поиск, и у меня есть таблица Users с идентификатором, первым и последним в ней.
Затем я запрашиваю имена, скажем: «Джон Смит».
Используя PHP, я разобью запрос на 2 части: q1 = Джон и q2 = Смит.
Я хочу разработать систему начисления баллов, в которой запись, имеющая first = John и last = Smith, выводится на вершину.
Итак, мой sql выглядит примерно так:
SELECT User.id, User.first, User.last
FROM users as User
WHERE (User.first = q1 OR User.first = q2) OR //if this is true 1 points
WHERE (User.last = q1 OR User.last = q2) OR //if this is true 1 points
//then sum up the points and order by it (so the User.id with John Smith will have 2 points)
Есть предложения?
Комментарии:
1.
sum (case when .... then 1 else 0 end)
должно сработать
Ответ №1:
Если в вашей СУБД есть функция IF, вы можете выполнить:
SELECT User.id, User.first, User.last,
IF (User.first = q1 OR User.first = q2, 1, 0)
IF (User.last = q1 OR User.last = q2, 1, 0) as points
FROM users as User
ORDER BY points DESC
Комментарии:
1. это сработает, но как мне предотвратить отображение в наборе результатов тех, у кого 0 баллов?
2. это то, о чем я думал, но, как ни странно, я получаю это: неизвестный столбец ‘points’ в предложении ‘where’
3. О, извините, вам приходится использовать
HAVING points > 0
в подобных случаях.