SQL-запрос с использованием Then (?) Или системы баллов

#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 в подобных случаях.