0

我正在试验一个用于修剪两个相关 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 的行,我得到了 ObjectCustomFieldValues ids 和 Transactions ids,但最近的 5 个项目除外。

现在,如何将其转换为可以在所有行上运行而不是手动指定 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

4

1 回答 1

0

如果您的结构不是INSERT带有 的数据UNIX_TIMESTAMP(),这取决于您的整个数据库结构顺序,这可能会很困难。如果添加 a ,无论如何UNIX_TIMESTAMP()都可以正确使用。ORDER BY

于 2013-06-22T00:14:00.910 回答