|
|
|
| Всем привет. такая проблемкО..
имеем 2 таблицы
таблица `tbl_1`:
`uid_1`(int)
`uid_2`(int)
`status`(tinyint)
|
2ая таблица `tbl_2`:
`uid_1`(int)
`uid_2`(int)
`time`(timestamp)
`read`(tinyint)
|
мне надо удалить из 1таблицы
все записи где
`tbl_1`.`status`=0
AND
`tbl_1`.`uid_1` = `tbl_2`.`uid_1`
AND
`tbl_2`.`uid_2` = `tbl_2`.`uid_2`
AND
`tbl_2`.`read`=0
AND
MAX(`tbl_2`.`time`) < NOW() - INTERVAL 10 MINUTE
|
основная проблема узнать макс. время. | |
|
|
|
|
|
|
|
для: а-я
(31.01.2009 в 20:53)
| | попробуйте сперва и вправду максимальное время узнать для каждой пары uid1 uid2 | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 21:15)
| | т.е. сделай отдельный запрос?
или сделать подзапрос?
`tbl_1`.`status`=0
AND
`tbl_1`.`uid_1` = `tbl_2`.`uid_1`
AND
`tbl_2`.`uid_2` = `tbl_2`.`uid_2`
AND
`tbl_2`.`read`=0
AND
(SELECT MAX(c.`time`) FROM `tbl_2` c WHERE
c.`uid_1`=`tbl_1`.`uid_1` AND c.`uid_2`=`tbl_1`.`uid_2` AND c.`read`=0
LIMIT 1) < NOW() - INTERVAL 10 MINUTE
|
что-то в этом роде? | |
|
|
|
|
|
|
|
для: а-я
(31.01.2009 в 21:27)
| | скорее JOIN с таблицей-подзапросом.
DELETE tbl1
FROM tbl1 JOIN
(SELECT uid_1, uid_2, MAX(`time`) AS t FROM tbl2
WHERE read = 0
GROUP BY uid1, uid2
HAVING t < NOW - INTERVAL 10 MINUTE
) USING (uid_1, uid_2)
WHERE status = 0
|
как-то так | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 21:36)
| | что не идет.. сначалса ругался read взял `read`
теперь ругается
#1248 - Every derived table must have its own alias | |
|
|
|
|
|
|
|
для: а-я
(31.01.2009 в 21:42)
| | ну так дайте алиас, раз просит.
) AS t ON tbl1.uid_1=t.uid_1 AND tbl1.uid_2=t.uid_2
WHERE status = 0 | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 22:04)
| | все!) большое спасибо!))
это то что мне надо!)) | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 22:04)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 21:36)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 21:36)
| | а трудно будет добавить удаление записей, которых вообще нет во 2ой таблице?
т.е. мы до этого из 1ой удаляли записи ориентируясь по записям 2ой таблицы.
а вот если во 2ой их не будет.. можно как-то их тоже вкл. под удаление?
наверно надо использовать LEFT JOIN? | |
|
|
|
|
|
|
|
для: а-я
(31.01.2009 в 23:26)
| | что-то никак доделать не могу...
а именно добавить в условие те записи, которых нет во 2ой... | |
|
|
|
|
|
|
|
для: а-я
(07.02.2009 в 19:38)
| | Общий подход
DELETE tbl1
FROM tbl1 LEFT JOIN tbl2
ON условие, описывающее соответствие записей в таблицах, которые нужно оставить
WHERE tbl2.id IS NULL
|
| |
|
|
|