MySQL, хранящий переменную

У меня есть запрос для поиска пользователя с использованием searchString по имени и фамилии сцеплены. Вот мой код:

  $query = " SELECT user_id, firstname, lastname, picUrl
FROM user
WHERE CONCAT(firstname, ' ', lastname) LIKE '%" . $searchString . "%'
ORDER BY CASE WHEN CONCAT(firstname, ' ', lastname) = '" . $searchString . "' THEN 0
WHEN CONCAT(firstname, ' ', lastname) = '" . $searchString . "%' THEN 1
WHEN CONCAT(firstname, ' ', lastname) = '%" . $searchString . "%' THEN 2
WHEN CONCAT(firstname, ' ', lastname) = '%" . $searchString . "' THEN 3
ELSE 4
END, CONCAT(firstname, ' ', lastname) ASC";

Есть ли способ сделать мой код чище, сохранив «CONCAT (firstname, », lastname)» как переменную с именем full_name?

Примеры,

WHERE full_name LIKE ...

WHEN full_name = ...

1

Решение

$query = " SELECT user_id, firstname, lastname, picUrl,
CONCAT(firstname, ' ', lastname) AS full_name
FROM user
WHERE full_name LIKE '%" . $searchString . "%'
ORDER BY CASE WHEN full_name = '" . $searchString . "'
THEN 0
WHEN full_name = '" . $searchString . "%'
THEN 1
WHEN full_name = '%" . $searchString . "%'
THEN 2
WHEN full_name = '%" . $searchString . "'
THEN 3
ELSE 4
END, full_name ASC";

В зависимости от того, что вы хотите сделать, вы можете опустить firstname, lastname, в части SELECT.

1

Другие решения

Выше не сработало. Я нашел это работать, хотя:

$query = " SELECT user_id, firstname, lastname, picUrl, firstname + ' ' + lastname as fullname
FROM user
WHERE CONCAT(firstname, ' ', lastname) LIKE '%" . $searchString . "%'
ORDER BY CASE WHEN fullname = '" . $searchString . "' THEN 0
WHEN fullname = '" . $searchString . "%' THEN 1
WHEN fullname = '%" . $searchString . "%' THEN 2
WHEN fullname = '%" . $searchString . "' THEN 3
ELSE 4
END, full_name DESC";
1

По вопросам рекламы [email protected]