2013-06-16 6 views
1

Я хочу сделать фильтрацию таблицы, но в таблице есть столбец user_id, и я хочу фильтровать его реальную таблицу (я имею в виду users.username).concat select не использовать в where where (mysql)

Мой код:

SELECT SQL_CALC_FOUND_ROWS `id`, `user_id`, `payment_type`, 
`is_paid`, `is_invoiced`, `invoice_number`, `created_at`, `ip`, 
`data`, `coupon_code`, `payment_total`, 
(select CONCAT(users.name,' ',users.surname) from users where users.id = orders.user_id) as fullname 
FROM orders 
WHERE (`fullname` LIKE '%M%' OR `payment_type` LIKE '%M%') ORDER BY `is_invoiced` asc 

Когда я это та или иная строчка, есть ошибка, как это: Unknown column 'fullname' in 'where clause'.

Как его решить?

+0

Кстати, почему использовать LIKE «% M%» для FULLNAME, когда она выглядит как есть только один результат для имени пользователя всегда, потому что of users.id? И вы используете orders.user_id, когда таблица заказов используется вне подзапроса? Не могли бы вы отобразить фактические данные из ваших таблиц? – Edper

ответ

0

Попробуйте использовать CONCAT в WHERE предложении, как:

SELECT SQL_CALC_FOUND_ROWS `id`, `user_id`, `payment_type`, 
`is_paid`, `is_invoiced`, `invoice_number`, `created_at`, `ip`, 
`data`, `coupon_code`, `payment_total`, 
(select CONCAT(users.name,' ',users.surname) from users 
WHERE CONCAT(users.name,' ',users.surname) LIKE '%M%' 
and users.id = orders.user_id) as fullname 
FROM orders 
WHERE `payment_type` LIKE '%M%' ORDER BY `is_invoiced` asc 
+0

Спасибо, что так много –

+0

Добро пожаловать @MuhammetArslan. Вы можете принять ответ, который действительно работает для вас кстати. Бог благословит и счастливое кодирование! – Edper

2

Вы можете использовать псевдонимы столбцов только в GROUP BY, ORDER BY или HAVING.

Из документации MySQL:

Стандартный SQL не позволяет ссылаться на псевдоним столбца в WHERE пункта а. Это ограничение накладывается, потому что, когда код WHERE выполняется, значение столбца может быть еще не определено

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

0

Используйте раздел HAVING.

SELECT SQL_CALC_FOUND_ROWS id, user_id, payment_type, is_paid, 
is_invoiced, invoice_number, created_at, ip, data, coupon_code, 
payment_total, (select CONCAT(users.name,' ',users.surname) 
from users where users.id = orders.user_id) as fullname 
FROM orders HAVING (fullname LIKE '%M%' OR payment_type LIKE '%M%') 
ORDER BY is_invoiced asc; 
+0

Действительно спасибо, itve работал –

Смежные вопросы