我正在尝试一个查询,我将用它来修剪两个相关的mysql表。我会用它来删除除最近的条目以外的所有条目。
此查询的行为完全符合我的预期:
SELECT
O.id AS O_id,
T.id AS T_id
FROM
rt.ObjectCustomFieldValues AS O
LEFT JOIN rt.Transactions AS T
ON O.id = T.NewReference
WHERE
O.Disabled = 1
AND O.CustomField = 58
AND O.ObjectId = 202784
AND T.id NOT IN (
SELECT
id
FROM
(
SELECT
id
FROM
Transactions
WHERE
Field = 58
AND ObjectId = 202784
ORDER BY
Created DESC
LIMIT 5
) Test
)
对于包含ObjectId 202784的行,除了最近的5个项目之外,我得到了ObjectCustomFieldValues ids和Transactions ids。
现在,如何将其转换为可以在所有行上运行的常规查询,而不是手动指定ObjectId?
总而言之,对于字段ID 58,我想迭代所有ObjectId值,并且对于每个值,删除除最新的ObjectCustomFieldValues和Transactions之外的所有值。
您可以在此处查看架构详细信息:
https://github.com/bestpractical/rt/blob/stable/etc/schema.mysql#L112
在这里:
https://github.com/bestpractical/rt/blob/stable/etc/schema.mysql#L328
答案 0 :(得分:0)
如果您的结构不是INSERT
数据UNIX_TIMESTAMP()
,则根据您的整个数据库结构顺序,这可能很难。如果您添加UNIX_TIMESTAMP()
,无论如何都可以正确使用ORDER BY
。