Php 返回的结果中mySQL和/或查询不一致

Php 返回的结果中mySQL和/或查询不一致,php,mysql,Php,Mysql,我有一个php中的mysql查询,设置为每小时由cron作业运行一次。有时结果是正确的,有时我得到的结果与被查询的日期不同。由于mysql在不同的时区运行,我使用phpdate()time()来更正当前的小时和日期。我首先在mysql中使用count来查看是否存在符合条件的记录。如果他们这样做了,我运行相同的查询并获取数据。我正在查找当天的记录。比当前时间提前一个小时或一个半小时,并匹配两个其他参数,即JobStatus和TechID列。有时它运行正常,有时我得到的记录显示,这是未来几天。数据库

我有一个php中的mysql查询,设置为每小时由cron作业运行一次。有时结果是正确的,有时我得到的结果与被查询的日期不同。由于mysql在不同的时区运行,我使用php
date()time()
来更正当前的小时和日期。我首先在mysql中使用count来查看是否存在符合条件的记录。如果他们这样做了,我运行相同的查询并获取数据。我正在查找当天的记录。比当前时间提前一个小时或一个半小时,并匹配两个其他参数,即JobStatus和TechID列。有时它运行正常,有时我得到的记录显示,这是未来几天。数据库中的时间列是一个varchar,因为我只需要当前时间来匹配字符串,因为约会是以
1PM
9:30AM
或表单上选择的任何时间段(以小时或半小时为单位)输入数据库的。我也在下面添加了我的数据库结构。我已经检查了数据库,看它是否损坏,检查结果是否良好。 我是不是在错误地处理这个问题

date_default_timezone_set("America/Chicago");

$SearchDate = date('Y-m-d', time());

//CURRENT TIME PLUS ONE HOUR
$TimePlusHour = date('gA', strtotime("+1 hours"));

//CURRENT TIME PLUS ONE HOUR PLUS SETTING MINUTES TO HALF HOUR
$Plus30 = date('g:30A', strtotime("+1 hours"));

$sqlCount = "SELECT COUNT(*) AS 'count' FROM ServiceTickets WHERE Date=
'".$SearchDate."' AND Time='".$Plus30."' OR Time='".$TimePlusHour."' 
AND JobStatus='1' OR JobStatus='3' AND TechID= '".$TechID."' ";

$sql1 = "SELECT * FROM ServiceTickets WHERE Date= '".$SearchDate."' AND
Time='".$Plus30."' OR Time='".$TimePlusHour."' AND JobStatus='1' OR
JobStatus='3' AND TechID= '".$TechID."' ORDER BY id ASC";
数据库结构

CREATE TABLE `ServiceTickets` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`FirstName` varchar(255) DEFAULT NULL,
`LastName` varchar(255) DEFAULT NULL,
`Phone` varchar(20) DEFAULT NULL,
`Address` varchar(255) DEFAULT NULL,
`Address2` varchar(255) DEFAULT NULL,
`City` varchar(100) DEFAULT NULL,
`State` varchar(50) DEFAULT NULL,
`Zip` varchar(10) DEFAULT NULL,
`Email` varchar(255) DEFAULT NULL,
`Date` date DEFAULT NULL,
`Time` varchar(50) DEFAULT NULL,
`JobDesc` text,
`JobStatus` varchar(10) DEFAULT NULL,
`TechID` varchar(3) DEFAULT NULL,
`LastModified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) 
ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

您在调用AND和OR时混淆了您的查询,我首先将OR放在括号中

$sqlCount = "SELECT COUNT(*) AS 'count' FROM ServiceTickets WHERE Date=
'".$SearchDate."' AND (Time='".$Plus30."' OR Time='".$TimePlusHour."') 
AND (JobStatus='1' OR JobStatus='3') AND TechID= '".$TechID."' ";

$sql1 = "SELECT * FROM ServiceTickets WHERE Date= '".$SearchDate."' AND
(Time='".$Plus30."' OR Time='".$TimePlusHour."') AND (JobStatus='1' OR
JobStatus='3') AND TechID= '".$TechID."' ORDER BY id ASC";

您假设所谓的“time”列中的varchar值可以可靠地与PHP中建立的时间值进行比较。如果无法访问您的数据,我们只能猜测。顺便说一句:用sql本身使用的单词(如“日期”和“时间”)命名列不是一个好的做法。但是如果我错了,请纠正我@used_by_已经不是例如
$TimePlusHour=date('gA',strotime(+1小时))字符串?因此,如果time列中的varchar值是,比如说
9PM
,而
$TimePlusHour
变量也是
9PM
,为什么这不起作用?时间列中的varchar值是以1/2小时为增量的多种可能性之一,从上午8点开始,然后是上午8:30,然后是上午9点,依此类推。这些值是从表单中选择的,如果它们匹配,则只在列中输入所选的时间范围。但什么能保证格式匹配呢。对任何时态数据使用VARCHAR如果使用时态数据类型,将避免很多困难。对于存储数据的列类型,您的建议是什么?这非常有意义。我猜这可能是它的可靠性一直正确的原因之一,顺序在进行查询时很重要,在进行单独查询时,在阅读它但不运行时似乎有意义。始终在括号之前或括号中处理。