У меня есть таблица, как этотнесколько переменных назначения с одной колонкой, как результат
+----+------+
| ID | Name |
+----+------+
| 0 | Foo |
| 1 | Bar |
+----+------+
на основе таблицы строк, которые я хочу, чтобы вычислить рейтинг на основе каждой строки, так что запрос как
SELECT *, [calculation] AS ranking
FROM table
ORDER BY ranking DESC
возвращает что-то вроде
+----+------+---------+
| ID | Name | Ranking |
+----+------+---------+
| 0 | Bar | 3 |
| 1 | Foo | 1 |
+----+------+---------+
Моя проблема в том, что мне нужно выполнить несколько заданий на строку без получения большего количества столбцов; в основном что-то вроде
@ranking:= 0
IF(Name LIKE $firstTerm, @ranking := @ranking + 1, @ranking := @ranking)
IF(Name LIKE $secondTerm, @ranking := @ranking + 1, @ranking := @ranking)
IF(Name LIKE $thirdTerm, @ranking := @ranking + 1, @ranking := @ranking)
Для каждой строки, так что в конце концов у меня есть либо 0, 1, 2 или 3, как один дополнительный столбец для каждой записи в моей таблице
EDIT: В теории динамически генерируемый запрос, как
SELECT *
FROM table
ORDER BY SUM(
CASE
WHEN
(NAME LIKE $firstTerm AND NAME NOT LIKE $secondTerm AND NAME NOT LIKE $thirdTerm)
OR (NAME NOT LIKE $firstTerm AND NAME LIKE $secondTerm AND NAME NOT LIKE $thirdTerm)
OR (NAME NOT LIKE $firstTerm AND NAME NOT LIKE $secondTerm AND Name LIKE $thirdTerm) THEN 1
WHEN (Name LIKE $firstTerm AND Name LIKE $secondTerm AND Name NOT LIKE $thirdTerm)
OR (Name NOT LIKE $firstTerm AND Name LIKE $secondTerm AND Name LIKE $thirdTerm) THEN 2
WHEN (Name LIKE $firstTerm AND Name LIKE $secondTerm AND Name LIKE $thirdTerm) THEN 3
ELSE 0
) DESC;
будет работать так, как ожидалось, но вы, вероятно,
Расскажите нам о том, что расчет – Strawberry
Это должно быть несколько LIKE сравнения, поэтому чем больше матчей он, тем выше она занимает – RoiEX
@Strawberry отредактированные мой вопрос будет более правильно (добавлено LIKE пример заявление) – RoiEX