我面临着一个奇怪的问题,如果我用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。有谁能帮忙找出确切的问题吗?
更新:这里我更新了id53

最佳答案

关于查询本身的一些提示:
您的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开始,这个扩展就被弃用了,以后将被删除。相反,应该使用MySQLiPDO_MySQL扩展名。有关更多信息,请参见MySQL: choosing an API guiderelated FAQ
编辑:
刚刚意识到你GROUP BY case_id
如果id53和id139都有相同的case_idMySQL需要知道哪些行可以被丢弃。如果不提供此信息,则两行中的一行或多或少会被随机丢弃。
要解决此问题,请使用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/

10-11 22:36
查看更多