|
|
|
|
|
для: cheops
(21.10.2006 в 13:46)
| | >Извиняюсь, что то заклинило меня на IF :))), какую ошибку возвращает запрос? с дополинтельными условиями тоже должно работать.
Никакую не возвращает, просто для одной группы выдвал результат, а для другой нет.
Но я вроде разобрался, почитав по подробнее примеры в книжках. Добавил во вложенный запрос условие связку с внешним запросом. Так:
$sql_users = "
SELECT
users.id_user,
users.name,
users.surname,
users.patronymic,
users.email,
users.mail_confirm,
users.our,
users_ds.actuated,
subs_users.id_user AS id_user_subs,
subs_users.code_subs
FROM users
LEFT JOIN users_ds USING (id_user)
LEFT JOIN subs_users USING (id_user)
WHERE NOT EXISTS
(SELECT * FROM subs_users WHERE id_user = users.id_user AND code_subs = ".$code_subs.")
AND code_group = ".$_POST['code_group']."
GROUP BY users.id_user
ORDER BY users.date_reg DESC";
|
Теперь вроде бы работает как надо... не знаю что будет дальше... если что еще обращусь...
Спасибо! Классная книжка! | |
|
|
|
|
|
|
|
для: tAleks
(21.10.2006 в 13:27)
| | Извиняюсь, что то заклинило меня на IF :))), какую ошибку возвращает запрос? с дополинтельными условиями тоже должно работать. | |
|
|
|
|
|
|
|
для: cheops
(21.10.2006 в 12:55)
| | >Дело в том, что конструкция IF NOT EXISTST не применяется в свободном виде, она является частью операторов CREATE TABLE, CTEATE DATABASE и CREATE SCHEMA. Применять к вложенному запросу её не получится.
Как это не получиться? В книжке "Самоучитель MySQL 5"( Авторы: М. Кузнецов и И. Симдянов) написано что получиться.
Глава: 23.3. Проверка на существование. стр. 386.
Там куча примеров изспользования EXISTS и NOT EXISTS с операторам SELECT, Но там они приведены без дополнительных условий в конструкции WHERE.
Если я пишу, т.к. в книжке, то все работает.. но мне нужно чтобы юзеры брались только со значеием code_group = $_POST['code_group'].
Помогите, плиз, очень надо.... | |
|
|
|
|
|
|
|
для: tAleks
(21.10.2006 в 10:47)
| | Дело в том, что конструкция IF NOT EXISTST не применяется в свободном виде, она является частью операторов CREATE TABLE, CTEATE DATABASE и CREATE SCHEMA. Применять к вложенному запросу её не получится. | |
|
|
|
|
|
|
| Можно ли использовать дополнительные условия вместе с EXISTS? Например так:
<?php
$sql_users = "
SELECT
users.id_user,
users.name,
users.surname,
users.patronymic,
users.email,
users.mail_confirm,
users.our,
users_ds.actuated,
subs_users.id_user AS id_user_subs,
subs_users.code_subs
FROM users
LEFT JOIN users_ds USING (id_user)
LEFT JOIN subs_users USING (id_user)
WHERE
code_group = ".$_POST['code_group']." AND
NOT EXISTS
(SELECT id_user FROM subs_users WHERE code_subs = ".$code_subs.")
GROUP BY users.id_user
ORDER BY users.date_reg DESC"
?>
|
Только почему-то это не работает.
Мне нужно извлечь строки из объединной таблицы, в которых code_group = ".$_POST['code_group'] и для которых нет записей в таблице subs_users.
Но никак не могу этого сделать... уже третий день сижу с этим...
Таблицы:
--
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id_user` int(11) NOT NULL auto_increment,
`id_user_ds` int(11) default NULL,
`surname` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`patronymic` varchar(255) NOT NULL,
`sex` enum('male','female') default NULL,
`email` varchar(255) NOT NULL,
`icq` int(11) default NULL,
`url` varchar(255) NOT NULL,
`birth_day` date NOT NULL,
`pass` char(32) NOT NULL,
`mail_confirm` enum('y','n') NOT NULL default 'n',
`our` enum('y','n') NOT NULL default 'n',
`code_group` int(11) default NULL,
`date_reg` datetime NOT NULL,
PRIMARY KEY (`id_user`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Пользователи' AUTO_INCREMENT=311 ;
--
-- Структура таблицы `users_ds`
--
CREATE TABLE `users_ds` (
`id_ds` int(11) NOT NULL auto_increment,
`id_hlf` int(11) default NULL,
`showhide` enum('show','hide') NOT NULL default 'hide',
`locked` enum('y','n') NOT NULL default 'y',
`code_lock` int(11) NOT NULL,
`rights` enum('founder','ds') NOT NULL default 'ds',
`service` enum('free','commercial') default 'commercial',
`pays` enum('y','n') NOT NULL default 'n',
`partners` enum('y','n') NOT NULL default 'n',
`actuated` enum('y','n') NOT NULL default 'n',
`foto` tinytext NOT NULL,
`id_user` int(11) default NULL,
PRIMARY KEY (`id_ds`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Параметры Дистрибьюторов' AUTO_INCREMENT=40 ;
--
-- Структура таблицы `subs_users`
--
CREATE TABLE `subs_users` (
`id_subs_user` int(11) NOT NULL auto_increment,
`id_user` int(11) default NULL,
`code_subs` int(11) default NULL,
`date_subs` datetime NOT NULL,
`status` enum('active','inactive') NOT NULL default 'inactive',
PRIMARY KEY (`id_subs_user`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Подписчики (таблица связка)' AUTO_INCREMENT=18 ;
|
Суть в следующем. Когда юзер подписывается на какую-то расылку, в таблице subs_users делается запись. Юзер с id таким-то подписался на расылку с кодом таким-то.
Юзеры в таблице users разделены по категориям.
И нужно извлечь юзеров из одной категории, только тех юзеров, которые не подписаны на данную рассылку.
Вот примерно так. Надеюсь понятно объяснил.
Помогите, плиз.... | |
|
|
| |
|