所以,我试图修改以下查询:
SELECT *
FROM flow
INNER JOIN flow_strings
USING(node_id)
WHERE
(
flow.parent = 0
OR flow.parent = :user_flow
)
AND flow.source = 0
AND :input LIKE CONCAT('%', flow_strings.sql_regex, '%')
ORDER BY flow.parent DESC, RAND()
查询的工作方式完全符合预期。但是,我需要稍微修改一下。假设表priority
上有flow
INT列,如何修改它以仅获取flow.priority
等于MAX(priority)
的结果?
换句话说,我希望查询完全按照它的方式执行,但是如果有优先级值,我希望它只从最高优先级中选择。如果有多个高优先级值,则应选择两者。
我在StackOverflow上看到其他一些帖子似乎问了同样的问题,但答案似乎没有解释解决方案 - 他们只发布答案。如果你能附上正在发生的事情的解释,我会非常感激!谢谢!
答案 0 :(得分:0)
你有没有尝试过这种方式
WHERE
(
flow.parent = 0
OR flow.parent = :user_flow
) AND
flow.priority = (Select Max(priority) From Flow)
答案 1 :(得分:0)
这是最简单,效率最低的答案:
SELECT *
FROM flow
INNER JOIN flow_strings
USING(node_id)
WHERE
(
flow.parent = 0
OR flow.parent = :user_flow
)
AND flow.source = 0
AND :input LIKE CONCAT('%', flow_strings.sql_regex, '%')
AND priority=(SELECT MAX priority FROM flow)
ORDER BY flow.parent DESC, RAND()
答案 2 :(得分:0)
解决此问题的一种方法是使用子查询:
SELECT *
FROM flow f
INNER JOIN flow_strings
USING(node_id)
WHERE
(
f.parent = 0
OR f.parent = :user_flow
)
AND f.source = 0
AND :input LIKE CONCAT('%', flow_strings.sql_regex, '%')
AND priority=(SELECT MAX(priority) FROM flow f2 where [grouping condition])
ORDER BY flow.parent DESC, RAND()
这样,您只能在满足分组条件的人中选择具有最高优先级的行。通常,这个是主表中的一个或多个字段与子查询中的相应字段之间的相等。例如,在您的情况下可能是:
f.parent=f2.parent
(这是我的猜测,我不确切知道你们桌子的意思。