Я пытаюсь найти запрос по имени и фамилии
вот мой запрос
SELECT d.title, GROUP_CONCAT(u.firstName,' ',u.lastName) as fullname
FROM DEALS d
left JOIN USER u ON u.idUser = d.userId
WHERE ((d.title LIKE '%goutham%' OR d.keywords LIKE '%goutham%')
OR fullname LIKE '%goutham%') AND d.isPublic=1
Но я получил
Неизвестный столбец 'fullname' в 'where clause'
Вы не можете использовать псевдоним столбца where
. Это не имеет никакого отношения к остальной части вашего запроса.
У вас нет GROUP BY
, поэтому я подозреваю, что GROUP_CONCAT()
не предназначен. Вместо этого вы хотите CONCAT()
. Вы можете повторить выражение в WHERE
, но я думаю, что вы должны смотреть в каждом компоненте:
SELECT d.title, CONCAT(u.firstName, ' ', u.lastName) as fullname
FROM DEALS d left JOIN USER
u
ON u.idUser = d.userId
WHERE (d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
u.firstName LIKE '%goutham%' OR
u.lastName LIKE '%goutham%'
) AND
d.isPublic = 1;
Если вы заботитесь о производительности и ищете слова, тогда вам может понадобиться изучить возможности полнотекстового индекса MySQL.
Если вы все еще хотите посмотреть на комбинацию, я бы рекомендовал повторить выражение:
WHERE (d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
CONCAT(u.firstName, ' ', u.lastName) LIKE '%goutham%'
) AND
d.isPublic = 1;
Непосредственной причиной вашей проблемы является то, что вы не можете ссылаться на псевдоним, определенный в предложении SELECT
предложении WHERE
того же запроса. Решение заключается в повторении всего выражения вместо использования псевдонима. Однако, основываясь на вашем комментарии, вы действительно хотите проверить имя, так что сделайте именно это:
SELECT
d.title,
CONCAT(u.firstName, ' ', u.lastName) AS fullname
FROM DEALS d
LEFT JOIN USER u
ON u.idUser = d.userId
WHERE
(d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
u.firstName LIKE '%goutham%') AND d.isPublic = 1;
goutham
? Вы ищете имя или фамилию? Имейте в виду, что ваш псевдоним fullname
представляет собой конкатенацию с пробелом из двух других полей.
goutham
? Это имя, фамилия или оба?