|
|
|
| Есть две таблицы:
CREATE TABLE `shop_coupons` (
`id_coupon` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`discount ` double NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
|
И
CREATE TABLE `shop_coupons_user` (
`id_coupon` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`id_order` int(11) NOT NULL
) ENGINE= MyISAM DEFAULT CHARSET=cp1251;
|
Задача такая: нужно вывести активированные купоны из таблицы shop_coupons (если есть запись в таблице shop_coupons_user, то купон считается активированным).
То есть нужно вывести купоны, о которых нет записей в таблице shop_coupons_user.
Делаю запрос:
SELECT shop_coupons.*,
(SELECT COUNT(*) FROM shop_coupons_user WHERE shop_coupons_user.id_coupon=shop_coupons.id_coupon) AS `activate`
FROM shop_coupons
|
Выводит купон + количество записей в таблице shop_coupons_user с этим купоном.
При попытки указать условие:
SELECT shop_coupons.*,
(SELECT COUNT(*) FROM shop_coupons_user WHERE shop_coupons_user.id_coupon=shop_coupons.id_coupon) AS `activate`
FROM shop_coupons WHERE `activate` > 0
|
Почему-то выдает ошибку:
#1054 - Unknown column 'activate' in 'where clause'
|
Прошу помочь с данной задачей, заранее благодарен. | |
|
|
|
|
|
|
|
для: deltamc
(14.02.2014 в 16:12)
| | а COUNT(*) тут вообще к чему?
у вас тут два варианта, либо использовать JOIN либо NOT IN
если я правильно понял что вы хотите вывести
речь о неактивированных (NOT IN) купонах? или об активированных (IN) ?
хм.. у вас один купон может принадлежать нескольким пользователям и надо вывести и количество?
попробуйте WHERE заменить на HAVING | |
|
|
|
|
|
|
|
для: Valick
(14.02.2014 в 17:52)
| | Спасибо, получилось.
Сделал так:
SELECT * FROM shop_coupons WHERE id_coupon NOT IN(SELECT id_coupon FROM shop_coupons_user)
|
| |
|
|
|