mysql group concat неизвестная ошибка столбца

0

Я пытаюсь найти запрос по имени и фамилии

вот мой запрос

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'

  • 0
    Ну, что такое goutham ? Это имя, фамилия или оба?
  • 2
    Возможный дубликат Можно ли использовать псевдоним в предложении WHERE в MySQL?
Показать ещё 5 комментариев
Теги:
join

2 ответа

0

Вы не можете использовать псевдоним столбца 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;
0

Непосредственной причиной вашей проблемы является то, что вы не можете ссылаться на псевдоним, определенный в предложении 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;
  • 0
    Но если я хочу выполнить поиск по комбинации, такой как (firstName и lastName), возможно ли с этим запросом?
  • 0
    Это не имеет смысла для меня. Что такое goutham ? Вы ищете имя или фамилию? Имейте в виду, что ваш псевдоним fullname представляет собой конкатенацию с пробелом из двух других полей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню