Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择具有最高优先级的行_Mysql - Fatal编程技术网

Mysql 选择具有最高优先级的行

Mysql 选择具有最高优先级的行,mysql,Mysql,我正在做一个查询,我有点卡住了 我的问题是: SELECT * FROM routine_actions AS ra JOIN routines AS r ON r.id = ra.routine_id JOIN account_routines AS ar ON ar.routine_id = r.id JOIN accounts AS a ON a.id = ar.account_id WHERE (ra.last_run + INTERVAL

我正在做一个查询,我有点卡住了

我的问题是:

SELECT *
FROM 
    routine_actions AS ra
JOIN 
    routines AS r ON r.id = ra.routine_id
JOIN 
    account_routines AS ar ON ar.routine_id = r.id
JOIN 
    accounts AS a ON a.id = ar.account_id
WHERE
    (ra.last_run + INTERVAL ra.interval_minutes MINUTE <= NOW() OR ra.last_run IS NULL)
AND
    r.created_at + INTERVAL r.runtime_days DAY > NOW()
选择*
从…起
作为ra的常规行动
参加
r.id=ra.routine\u id上作为r的例程
参加
帐户\u例程作为ar上的ar。例程\u id=r.id
参加
a.id=ar.account\u id上的帐户
哪里
(ra.last_run+间隔ra.INTERVAL_minutes NOW)()
我想做的是:

一个
帐户
有许多例程。一次只能使用一个
例程
,这就是优先级最高的
例程。包含优先级列的表是
帐户_例程
,因为帐户可以重用例程并指定不同的优先级

数字越大,优先级越高。当前查询正在从所有帐户提取所有例程。但我只需要从每个帐户提取一个优先级最高的例程


这怎么可能呢?我不需要解决方案,只需要看看哪里,这样我就能知道如何解决这个问题。

我认为您需要找到最大优先级,并将其包含在联接中,以限制返回的行

SELECT
      *
FROM routine_actions AS ra
      JOIN routines AS r ON r.id = ra.routine_id
      JOIN account_routines AS ar ON ar.routine_id = r.id
      JOIN (
            SELECT
                  account_id
                , MAX(priority) AS max_priority
            FROM account_routines
            GROUP BY
                  account_id
      ) AS mxr ON ar.priority = mxr.max_priority
                  AND ar.account_id = mxr.account_id
      JOIN accounts AS a ON a.id = ar.account_id
WHERE ...

您是否尝试过按ar排序。优先级描述
排序仍将包括优先级较低的例程,对吗?我正在使用多个帐户,每个帐户只需要一个例程。如果我使用用户
排序,则会得到一个非常复杂的结果集。请注意,这是有效的。最初我尝试遵循以下内容:…bu没有任何运气。非常感谢您的解决方案。我刚刚意识到一个问题。如果帐户包含两个例程,一个优先级为4,另一个优先级为10。如果优先级为10的例程处于非活动状态,则将永远不会返回4。我正在考虑在连接中的SELECT中添加WHERE子句,但我需要在连接到pu的连接中添加一个连接我会将所需的表放入。我认为事情可能会变得混乱,或者那样会有性能问题?看起来不错,我只会调整where子句,这样您就不会将数据更改为适合compaison to now(),相反,立即更改以适应数据:
where r.created\u at>(now()-INTERVAL r.runtime\u days)