社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MYSQL动态插入间隔日数?[副本]

spice • 5 年前 • 1604 次点击  

我知道您可以使用CASE选择另一列的值来设置间隔:

SELECT CASE some_column
       WHEN "SOME_VALUE" THEN date_add(date, INTERVAL value DAY)
       WHEN "SOME_OTHER_VALUE" THEN date_add(date, INTERVAL value DAY)
       END
       AS newDate
FROM table

但是我如何从脚本中传递这个数字(而不是数据库中的值)。

例如,我有一个常量PHP脚本,它从.env文件中获取它的值:

define("DOWNLOAD_DAYS", getenv("DOWNLOAD_DAYS")); // say this is 3 for example

我的查询当前如下所示:

$sql = 'SELECT * FROM orders WHERE user_id = :user_id 
        AND status = :status
        AND date_added > DATE_SUB(NOW(), INTERVAL 7 DAY)
        ORDER BY date_added DESC';

我怎么能用 DOWNLOAD_DAYS 替换此查询中的7的常量?

我试过。。。

AND date_added > DATE_SUB(NOW(), INTERVAL DOWNLOAD_DAYS DAY)

... 这显然不起作用 INTERVAL 需要关键字,而不是字符串或变量。

并尝试将整个命令与PDO绑定。。。

$range = 'DATE_SUB(NOW(), INTERVAL ' . DOWNLOAD_DAYS . ' DAY)';
...
AND date_added > :range
...
$stmt->bindParam(':range', $range, PDO::PARAM_STR);

.. 但这一切都没有。

有什么建议吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49343
 
1604 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Nick
Reply   •   1 楼
Nick    5 年前

您可以使用常量生成整个查询:

$sql = 'SELECT * FROM orders WHERE user_id = :user_id 
        AND status = :status
        AND date_added > DATE_SUB(NOW(), INTERVAL ' . DOWNLOAD_DAYS . ' DAY)
        ORDER BY date_added DESC';

或者你可以绑定到 只是 区间值

$sql = 'SELECT * FROM orders WHERE user_id = :user_id 
        AND status = :status
        AND date_added > DATE_SUB(NOW(), INTERVAL :interval DAY)
        ORDER BY date_added DESC';
$stmt->bindValue(':interval', DOWNLOAD_DAYS, PDO::PARAM_INT);