【发布时间】:2019-09-18 22:24:18
【问题描述】:
我遇到了一个关于日期时间选择器和 MySQL 的小问题。
我有一个 PHP 脚本应该在所选日期之前(包括)获取记录。但是,数据集返回空。
这是脚本的 SQL 部分:
$sql = 'SELECT `pro_title`,
`pro_part_number`,
`name` AS flag_name,
`old_val`,
`new_val`
FROM `products`
INNER JOIN `flags` ON `id` = `pro_flag_id`
INNER JOIN `flag_history` ON `pro_part_number` = `part`
WHERE `pro_flag_id` IN(:flags)
AND STR_TO_DATE(`ts`, "%y-%m-%d") <= :dateTs;';
然后我使用 PDO 来绑定参数:
array(
':flags' => implode(',', $flags), # this outputs 1,2,3
':dateTs' => $date # this outputs 2019-04-30
)
我也尝试将 <= 更改为 >= 无济于事(不是说它应该工作,但我想我会尝试)。
我遇到了好几篇 SO 帖子,但实际上没有什么能让我到达那里。以下是flag_history 表的描述(ts 存储的位置)
MariaDB [mastern]> describe `flag_history`;
+---------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| part | varchar(25) | NO | | NULL | |
| ts | datetime | YES | | CURRENT_TIMESTAMP | |
| old_val | int(4) | YES | | NULL | |
| new_val | int(4) | YES | | NULL | |
+---------+-------------+------+-----+-------------------+----------------+
还有一些示例数据:
MariaDB [mastern]> select * from `flag_history` order by `id` desc limit 5;
+-------+----------+---------------------+---------+---------+
| id | part | ts | old_val | new_val |
+-------+----------+---------------------+---------+---------+
| 24026 | PART-001 | 2019-04-30 09:42:22 | 0 | 3 |
| 24025 | PART-002 | 2019-04-30 09:42:22 | 0 | 3 |
| 24024 | PART-003 | 2019-04-30 09:42:22 | 0 | 3 |
| 24023 | PART-004 | 2019-04-30 09:42:22 | 0 | 3 |
| 24022 | PART-005 | 2019-04-30 09:42:22 | 0 | 3 |
+-------+----------+---------------------+---------+---------+
然后,使用 PART-001 确保 flag_id 已实际设置:
MariaDB [mastern]> select `pro_flag_id` from `products` where `pro_part_number` = "PART-001";
+-------------+
| pro_flag_id |
+-------------+
| 3 |
+-------------+
所以我不太确定出了什么问题,我的逻辑和一切(MySQL newb)看起来应该可以工作,但它给了我空数据。我还尝试将INNER JOIN 更改为LEFT JOIN,但同样无效。
我做错了什么?
【问题讨论】:
-
PDO 绑定日期可能:....stackoverflow.com/questions/2374631/pdoparam-for-dates
-
@DirkScholten 好地方!在代码 + Q 中更正。不幸的是仍然没有修复它
-
@RichardHousham 尝试通过绑定 - 将
PDO::PARAM_STR添加到:dateTs绑定。再次没有:/ -
@treyBake 你能把你的表和它们的值放在一起,这样我们就可以玩弄它并帮助调试它吗?
-
db-fiddle.com 或 sqlfiddle.com 是我以前一直在使用的。当问 SQL 问题时,用你的表/数据和当前查询创建一个小提琴总是有帮助的。让我们这些试图回答的人更容易进行故障排除:-)