MYSQL - 案例[重复]的最小条件

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有2张桌子:ordersorders_others

orders,我有两个重要的专栏:priority_datedate_end

orders_others,我有一个重要的专栏:date_to

我想搜索下一个订单(有2个表),但下一个日期必须是>= CURRENT DATE

MySQL代码:

SELECT 
    users.*, 
    LEAST(
        MIN(
            CASE WHEN orders.date_end >= CURDATE() THEN orders.date_end ELSE "9999-99-99 99:99:99" END
        ), 
        MIN(
            CASE WHEN orders_others.date_to >= CURDATE() THEN orders_others.date_to ELSE "9999-99-99 99:99:99" END
        ), 
        MIN(
            CASE WHEN orders.priority_date >= CURDATE() THEN orders.priority_date ELSE "9999-99-99 99:99:99" END
        )
    ) as next_order, 
    MIN(
        CASE WHEN orders.date_end >= CURDATE() THEN orders.date_end ELSE "9999-99-99 99:99:99" END
    ) AS next_ending, 
    MIN(
        CASE WHEN orders_others.date_to >= CURDATE() THEN orders_others.date_to ELSE "9999-99-99 99:99:99" END
    ) AS next_order_others, 
    MIN(
        CASE WHEN orders.priority_date >= CURDATE() THEN orders.priority_date ELSE "9999-99-99 99:99:99" END
    ) as next_priority_date
FROM 
    `users` 
    LEFT JOIN `orders` ON `orders`.`idu` = `users`.`id` 
    LEFT JOIN `orders_others` ON `orders_others`.`unique` = `orders`.`unique` 
    AND `orders_others`.`date_to` >= (
        CURDATE() - INTERVAL 1 YEAR
    ) 
WHERE `next_order`>='2017-12-30 00:00:00'
GROUP BY 
    `users`.`id` 
ORDER BY 
    `next_order` ASC 
LIMIT 
    10

结果:'where子句'中的未知列'next_order'

如果我删除条件它工作正常:)

php mysql condition
1个回答
2
投票

变量不能直接分配到where条件和FROM之后的位置,所以为此,你可以在having子句中提供条件。

SELECT 
users.*, 
LEAST(
    MIN(
        CASE WHEN orders.date_end >= CURDATE() THEN orders.date_end ELSE "9999-99-99 99:99:99" END
    ), 
    MIN(
        CASE WHEN orders_others.date_to >= CURDATE() THEN orders_others.date_to ELSE "9999-99-99 99:99:99" END
    ), 
    MIN(
        CASE WHEN orders.priority_date >= CURDATE() THEN orders.priority_date ELSE "9999-99-99 99:99:99" END
    )
) as next_order, 
MIN(
    CASE WHEN orders.date_end >= CURDATE() THEN orders.date_end ELSE "9999-99-99 99:99:99" END
) AS next_ending, 
MIN(
    CASE WHEN orders_others.date_to >= CURDATE() THEN orders_others.date_to ELSE "9999-99-99 99:99:99" END
) AS next_order_others, 
MIN(
    CASE WHEN orders.priority_date >= CURDATE() THEN orders.priority_date ELSE "9999-99-99 99:99:99" END
) as next_priority_date
FROM 
`users` 
LEFT JOIN `orders` ON `orders`.`idu` = `users`.`id` 
LEFT JOIN `orders_others` ON `orders_others`.`unique` = `orders`.`unique` 
AND `orders_others`.`date_to` >= (
    CURDATE() - INTERVAL 1 YEAR
) 

GROUP BY 
`users`.`id` having `next_order` >= '2017-12-30 00:00:00' 
ORDER BY 
`next_order` ASC 
LIMIT 10
© www.soinside.com 2019 - 2024. All rights reserved.