gpt4 book ai didi

php - mysql 和 PHP 中的结果冲突

转载 作者:行者123 更新时间:2023-11-29 03:06:36 28 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,如果我用 PHP 检查 mysql 查询,那么我没有根据 mysql 查询得到准确的结果。

但是如果我运行相同的查询,那么我会得到预期的结果,这里是 mysql 查询:

SELECT id, follow_up_datetime, followed_by, follow_up_status, case_time_zone, description, case_id
FROM case_note
WHERE TYPE LIKE '%follow-up-open%'
AND (
follow_up_datetime LIKE '%2013-01-08%'
OR date( follow_up_datetime ) < '2013-01-08'
)
AND follow_up_status <= '1'
GROUP BY case_id
ORDER BY case_id DESC
LIMIT 0 , 30

这个查询的结果是:

mysql_result

但是当我对 php 使用相同的查询时,我得到了错误的 ID:PHP

//current date is "2013-01-08";
$follow_q = "SELECT id, follow_up_datetime, followed_by, follow_up_status, case_time_zone, description, case_id
FROM case_note
WHERE `type` LIKE '%follow-up-open%'
AND (
follow_up_datetime LIKE '%$current_date%'
OR date(follow_up_datetime) < '$current_date'
)
AND follow_up_status <= '1'
GROUP BY case_id
ORDER BY case_id DESC";
$follow_r = mysql_query($follow_q) or die('Error in Query!<br />' . mysql_error());

此查询为我提供了类似于 53、84、47、36 的 ID。

最后三个 id 是正确的,但第一个不正确。我想要第一个 ID 是 139。谁能帮忙找出确切的问题?

UPDATE:这里我更新了 id 53

的结果

enter image description here

最佳答案

关于您的查询本身的一些提示:

您的follow_up_datetime 应该是 timestamp or datetime 类型

您的日期条件中不需要 LIKE 运算符。

DATE( `follow_up_datetime` ) = '2013-01-08' 
OR
DATE( `follow_up_datetime` ) < '2013-01-08'

这可以缩短为

DATE( `follow_up_datetime` ) <= '2013-01-08' 

如果你总是比较当前日期,你可以使用CURRENT_DATE

DATE( `follow_up_datetime` ) <= CURRENT_DATE

不要将 int 类型的 col 与字符串进行比较,这将强制 MySQL 将 col follow_up_status 的所有值转换为字符串。

`follow_up_status` <= 1

您确定类型条件需要 LIKE 吗?

`type` = 'follow_up_open'

会快得多。

关于 MySQL 扩展的 PHP 文档:

This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information.


编辑:

刚刚意识到您 GROUP BY case_id。如果 id 53 和 id 139 具有相同的 case_id MySQL 需要知道哪一行可以被丢弃。如果您不提供此信息,则两行中的其中一行或多或少会随机丢弃。

要解决此问题,请使用 aggregate function .在您的情况下,MIN() 将提供所需的结果。

使用 PHP 清理了整个查询 heredoc notation :

$follow_q = <<< EOQ
SELECT
MIN( `id` ) AS `id`,
`follow_up_datetime`,
`followed_by`,
`follow_up_status`,
`case_time_zone`,
`description`,
`case_id`
FROM
`case_note`
WHERE
`type` = 'follow-up-open'
AND
`follow_up_datetime` <= '{$current_date}'
AND
`follow_up_status <= 1
GROUP BY
`case_id`
ORDER BY
`case_id` DESC
EOQ;

关于php - mysql 和 PHP 中的结果冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14194293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com