Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: EXISTS и дополнительные условия в конструкции WHERE

Сообщения:  [1-5] 

 
 автор: tAleks   (21.10.2006 в 14:04)   письмо автору
 
   для: 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";


Теперь вроде бы работает как надо... не знаю что будет дальше... если что еще обращусь...

Спасибо! Классная книжка!

   
 
 автор: cheops   (21.10.2006 в 13:46)   письмо автору
 
   для: tAleks   (21.10.2006 в 13:27)
 

Извиняюсь, что то заклинило меня на IF :))), какую ошибку возвращает запрос? с дополинтельными условиями тоже должно работать.

   
 
 автор: tAleks   (21.10.2006 в 13:27)   письмо автору
 
   для: 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'].

Помогите, плиз, очень надо....

   
 
 автор: cheops   (21.10.2006 в 12:55)   письмо автору
 
   для: tAleks   (21.10.2006 в 10:47)
 

Дело в том, что конструкция IF NOT EXISTST не применяется в свободном виде, она является частью операторов CREATE TABLE, CTEATE DATABASE и CREATE SCHEMA. Применять к вложенному запросу её не получится.

   
 
 автор: tAleks   (21.10.2006 в 10:47)   письмо автору
 
 

Можно ли использовать дополнительные условия вместе с 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 разделены по категориям.

И нужно извлечь юзеров из одной категории, только тех юзеров, которые не подписаны на данную рассылку.

Вот примерно так. Надеюсь понятно объяснил.

Помогите, плиз....

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования