Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL]можно ли сделать такой запрос 
:(
    Опции темы
krinart
Дата 5.7.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 10.4.2008
Где: Донецк

Репутация: нет
Всего: нет



есть две таблицы

 users
-----------
|user_id|
|---------|

и

user_day
------------
|user_id|
|date     |
------------

связанные отношением "1:n"

задача: определить пользователей, у которых во второй таблице нет записей о сегодняшнем дне
(то есть именно о сегодняшнем, а не вообще нет записей во второй таблице)

предполагаю, что нужно использовать левое объединение, но составить запрос не получается, как не пытался, так как не могу подобрать условие для date.

можно сделать конечно это всё в цикле, проверять каждого пользователя, но хотелось бы ограничиться sql-запросом

подскажите пожалуста, можно ли организовать такой запросик
PM MAIL ICQ   Вверх
v2v
Дата 5.7.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Код

select user_id from users where user_id not in (
select user_id from user_date ud where ud.date=today()
)


Добавлено @ 16:39
наверное можно оптимальней выполнить, это первое что в голову пришло

Это сообщение отредактировал(а) v2v - 5.7.2008, 16:40


--------------------
PM   Вверх
skyboy
Дата 5.7.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



krinart, СУБД какое?
небось Fox Pro?
PM MAIL   Вверх
krinart
Дата 5.7.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 10.4.2008
Где: Донецк

Репутация: нет
Всего: нет



v2v,  чтото не работает такая конструкция


skyboy, mysql, для php стараюсь
PM MAIL ICQ   Вверх
skyboy
Дата 5.7.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(krinart @  5.7.2008,  16:34 Найти цитируемый пост)
mysql

а версия какая?
Цитата(krinart @  5.7.2008,  16:34 Найти цитируемый пост)
чтото не работает такая конструкция

что значит - не работает? так и пишет - отказываюсь работать? или все же какое-то сообщение об ошибке есть?

PM MAIL   Вверх
krinart
Дата 5.7.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 10.4.2008
Где: Донецк

Репутация: нет
Всего: нет



Цитата(skyboy @  5.7.2008,  17:51 Найти цитируемый пост)
а версия какая?

версия 5.0.51

Код

$query= "SELECT users.user_id, user_day.work, user_day.date
             FROM users LEFT JOIN user_day ON users.user_id = user_day.user_id
             WHERE
             (users.user_id NOT IN
                (
                    SELECT user_day.user_id
                    FROM user_day
                     WHERE user_day.date='".$date."'
                )
              )
              OR
              (
              (user_day.date='".$date."') AND (user_day.work<100) AND (user_day.work is not NULL)
              )";


в предыдущем варианте всё вроде бы работало, однако запрос необходимо усложнить, добавив условие, что нам подходят все пользователи, которые не выполняли сегодня работу, либо выполнили, но выполнили меньше критерия(100)... вроде бы так, однако в результате находтся те строки, которые были созданы до этого


PM MAIL ICQ   Вверх
v2v
Дата 5.7.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



что в предложенной мною конструкции не работает.
там сообщения об ошибке выводятся ....
для mysql:
Код

select user_id from users where user_id not in (
select user_id from user_date ud where date(curtime()) = date(ud.date)
)




--------------------
PM   Вверх
krinart
Дата 8.7.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 10.4.2008
Где: Донецк

Репутация: нет
Всего: нет



v2v, skyboy, 
спасибо горомное за помощь, вроде как разоборался и всё работает


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.5003 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.