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

Имеется таблица 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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395083
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395109
isamitakata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, почти так, но все ровно у меня есть запись за сегодня и скачка за сегодня но он запрос выбирает этот файл.

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

Как то так. Если фаил не скачаивается более 3х месяцев - удаляется. Буду благодарен за помощь! А то сам справится здесь не могу к сожалению.
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395151
Фотография 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
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395169
isamitakata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Every derived table must have its own alias
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395178
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну расставь алиасы в подзапросе, чё как этот-то...
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395189
isamitakata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395190
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
isamitakataругаетсякак ругается? "пашол*****насяльнике" или всё же сообщение об ошибке выдаёт? если второе, то почему его нет в теме?
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395197
isamitakata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,


Every derived table must have its own alias
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395226
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395232
isamitakata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

нет выбрало все файлы, здесь не учитывается когда был загружен файл. Т е с какого времени вести отсчет
...
Рейтинг: 0 / 0
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395236
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395246
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
isamitakataCygapb-007,

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

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

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

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

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

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

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

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

Код: 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
Выборка записей, которых нет в другой таблицу более 2-х месяцев
    #38395273
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей, которых нет в другой таблицу более 2-х месяцев
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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