Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей, которых нет в другой таблицу более 2-х месяцев / 16 сообщений из 16, страница 1 из 1
12.09.2013, 16:59:39
    #38395031
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Привет всем! Есть такая задача.

Имеется таблица files

id | name_file | date_upload
1 | test.txt | 2013-09-12 00:00:00
2 | test2.txt | 2013-09-05 00:00:00

и таблица downloads.

id | file_id | date
1 | 1 | 2013-09-12 00:00:00


Нужно выбрать записи из таблицы files которые не были скачены уже более трех месяцев, т е при загрузке файлы добавляется запись о скачивании в таблицу downloads. Помогите пожалуйста.
...
Рейтинг: 0 / 0
12.09.2013, 17:32:59
    #38395083
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
isamitakata,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * 
from files f
where not exists
(select 1 
from downloads d
where d.file_id = f.id
and d.date > (now() - interval 3 months) ) 
...
Рейтинг: 0 / 0
12.09.2013, 17:54:09
    #38395109
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
javajdbc, почти так, но все ровно у меня есть запись за сегодня и скачка за сегодня но он запрос выбирает этот файл.

Попробую понятнее расписать. И так допустим у меня есть есть в таблице files 4 записи, первые две я записал 17 июля, но скачен был всего один файл из двух до сегодняшнего дня. Значит удалить нужно только тот файл который не был загружен или был загружен, но более чем 3 месяца назад. Есть у меня еще две записи я их записал в базу сегодня, и нет на них скачиваний, значит выбирать их не нужно ведь три месяца еще не прошло и вдруг и скачают через месяц. Обратите внимание на поле date_upload в таблице files считай от него и надо вести отсчет этих 3 месяцев.

Как то так. Если фаил не скачаивается более 3х месяцев - удаляется. Буду благодарен за помощь! А то сам справится здесь не могу к сожалению.
...
Рейтинг: 0 / 0
12.09.2013, 18:22:59
    #38395151
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
чёта типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select f.name_file 
from files f,
(
select file_id
from downloads
group by file_id
having max(date) < (now() - interval 3 months))
) d
where f.id = d.file_id
...
Рейтинг: 0 / 0
12.09.2013, 18:40:47
    #38395169
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Akina,

Every derived table must have its own alias
...
Рейтинг: 0 / 0
12.09.2013, 18:48:15
    #38395178
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
ну расставь алиасы в подзапросе, чё как этот-то...
...
Рейтинг: 0 / 0
12.09.2013, 19:02:27
    #38395189
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Akina,

все ровно ругается

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select `f`.*
from `files` as `f`,
(
select `dw`.`file_id`
from `downloads` as `dw`
group by `dw`.`file_id`
having max(`dw`.`date`) < (now() - interval 3 month))
) `d`
where `f`.`id` = `d`.`file_id` AND `f`.`date_end` = '0000-00-00 00:00:00'
...
Рейтинг: 0 / 0
12.09.2013, 19:09:33
    #38395190
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
isamitakataругаетсякак ругается? "пашол*****насяльнике" или всё же сообщение об ошибке выдаёт? если второе, то почему его нет в теме?
...
Рейтинг: 0 / 0
12.09.2013, 19:26:56
    #38395197
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
tanglir,


Every derived table must have its own alias
...
Рейтинг: 0 / 0
12.09.2013, 20:16:18
    #38395226
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Akinaчёта типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select f.name_file 
from files f,
(
select file_id
from downloads
group by file_id
having max(date) < (now() - interval 3 months))
) d
where f.id = d.file_id

Не подходит, так как не показывает файлы, которые ни разу не скачивались.

Может быть, так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from files f
where not exists(
  select 1
  from downloads d
  where d.file_id=f.id
    and d.date>=(now() - interval 3 months)
  )
...
Рейтинг: 0 / 0
12.09.2013, 20:23:47
    #38395232
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Cygapb-007,

нет выбрало все файлы, здесь не учитывается когда был загружен файл. Т е с какого времени вести отсчет
...
Рейтинг: 0 / 0
12.09.2013, 20:29:24
    #38395236
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
isamitakatajavajdbc, почти так, но все ровно у меня есть запись за сегодня и скачка за сегодня но он запрос выбирает этот файл.

Попробую понятнее расписать. И так допустим у меня есть есть в таблице files 4 записи, первые две я записал 17 июля, но скачен был всего один файл из двух до сегодняшнего дня. Значит удалить нужно только тот файл который не был загружен или был загружен, но более чем 3 месяца назад. Есть у меня еще две записи я их записал в базу сегодня, и нет на них скачиваний, значит выбирать их не нужно ведь три месяца еще не прошло и вдруг и скачают через месяц. Обратите внимание на поле date_upload в таблице files считай от него и надо вести отсчет этих 3 месяцев.

Как то так. Если фаил не скачаивается более 3х месяцев - удаляется. Буду благодарен за помощь! А то сам справится здесь не могу к сожалению.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * 
from files f
where not exists
(select 1 
from downloads d
where d.file_id = f.id
and d.date > (now() - interval 3 months) ) 
and f.date_upload <  (now() - interval 3 months) 
...
Рейтинг: 0 / 0
12.09.2013, 20:38:16
    #38395246
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
isamitakataCygapb-007,

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

В таблицу downloads при каждом скачивании добавляется запись (id файла, дата скачивания), — это так?

Тогда «давно не скачивался» означает, что в этой таблице нет записей с недавней датой скачивания для этого файла.

Именно это проверяется в запросе — тогда почему в нем «выбрало все файлы»?

Я согласен, что может не хватать недавно добавленных файлов, то есть не хватает условия
Код: sql
1.
  or f.date_upload>=(now() - interval 3 months)

но это только увеличит число строк выборки.
...
Рейтинг: 0 / 0
12.09.2013, 20:46:27
    #38395252
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
javajdbc,

Совершенно верно, я с фильтром напутал, нужно только старые файлы показывать, ведь для удаления же...

Звиняюсь :)
...
Рейтинг: 0 / 0
12.09.2013, 21:01:40
    #38395263
isamitakata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Хм, вот этот вариант почти подошел. Я сам уже запутался.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * 
from files f
where not exists
(select 1 
from downloads d
where d.file_id = f.id
and d.date > (now() - interval 3 months) ) 
and f.date_upload <  (now() - interval 3 months) 



Сейчас буду пробовать еще. Отпишусь если что. Благодарю всех за поддержку! Спасибо javajdbc
...
Рейтинг: 0 / 0
12.09.2013, 21:14:53
    #38395273
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей, которых нет в другой таблицу более 2-х месяцев
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
mysql> create table uploads(id int, name_file text, date_upload date);
Query OK, 0 rows affected (0.03 sec)

mysql> create table downloads(id int, file_id int, date_download date);
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> insert into uploads (id, name_file, date_upload) values
    ->   (1,'file 1','2013-01-01')   -- скачивался в посл. 3 мес., не удалять
    -> , (2,'file 2','2013-01-02')   -- не скачивался в посл. 3 мес., удалять
    -> , (3,'file 3','2013-01-03')   -- не скачивался вообще, удалять
    -> , (11,'file 11','2013-09-11') -- скачивался, не удалять
    -> , (12,'file 12','2013-09-12');-- не скачивался, не удалять
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql>
mysql> insert into downloads(id, file_id, date_download) values
    ->   (1,1,'2013-01-01')
    -> , (2,1,'2013-09-09')
    -> , (3,2,'2013-01-01')
    -> , (4,2,'2013-02-02')
    -> , (5,11,'2013-09-12');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql>
mysql> select id, name_file, date_upload from uploads;
+------+-----------+-------------+
| id   | name_file | date_upload |
+------+-----------+-------------+
|    1 | file 1    | 2013-01-01  |
|    2 | file 2    | 2013-01-02  |
|    3 | file 3    | 2013-01-03  |
|   11 | file 11   | 2013-09-11  |
|   12 | file 12   | 2013-09-12  |
+------+-----------+-------------+
5 rows in set (0.00 sec)

mysql> select id, file_id, date_download from downloads;
+------+---------+---------------+
| id   | file_id | date_download |
+------+---------+---------------+
|    1 |       1 | 2013-01-01    |
|    2 |       1 | 2013-09-09    |
|    3 |       2 | 2013-01-01    |
|    4 |       2 | 2013-02-02    |
|    5 |      11 | 2013-09-12    |
+------+---------+---------------+
5 rows in set (0.00 sec)

mysql>
mysql> select q.id
    -> from
    -> (
    -> select id, date_upload d from uploads
    -> union
    -> select file_id, date_download from downloads
    -> ) q
    -> group by q.id
    -> having max(d) < (now() - interval 3 month);
+------+
| id   |
+------+
|    2 |
|    3 |
+------+
2 rows in set (0.00 sec)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей, которых нет в другой таблицу более 2-х месяцев / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]