我面临着一个奇怪的问题,如果我用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
此查询的结果是:
但是,当我在php中使用相同的查询时,我得到了错误的id:
菲律宾比索
//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());
这个查询提供的id类似于
53, 84, 47, 36
。最后三个id是正确的,但第一个不正确。我要第一个id是
139
。有谁能帮忙找出确切的问题吗?更新:这里我更新了id
53
最佳答案
关于查询本身的一些提示:
您的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类型的列与将强制MySQL将列
follow_up_status
的所有值强制转换为字符串的字符串进行比较。`follow_up_status` <= 1
你确定你需要
LIKE
的类型条件?`type` = 'follow_up_open'
会快得多。
关于MySQL扩展的PHP文档:
从PHP 5.5.0开始,这个扩展就被弃用了,以后将被删除。相反,应该使用MySQLi或PDO_MySQL扩展名。有关更多信息,请参见MySQL: choosing an API guide和related FAQ。
编辑:
刚刚意识到你
GROUP BY case_id
。如果id
53
和id139
都有相同的case_id
MySQL需要知道哪些行可以被丢弃。如果不提供此信息,则两行中的一行或多或少会被随机丢弃。要解决此问题,请使用aggregate function。在您的情况下,
MIN()
将提供所需的结果。使用PHP清理了整个查询:
$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/