【问题标题】:Date Comparison in Select Query Returns False Results选择查询中的日期比较返回错误结果
【发布时间】:2016-07-14 07:03:17
【问题描述】:

我正在使用以下查询来显示记录。

$query = mysqli_query($con, "SELECT * FROM episode where episodeDate < '$loaddate' 
and dramaID != (select dramaID from drama where popularity = '5') 
and dramaID != (select dramaID from drama where popularity = '6') 
order by episodeDate desc");
  //number of rows
 echo $rowCount = mysqli_num_rows($query);

其中 loaddate 是 mysql 数据库中的 DATE VARIABLE。剧集日期也是如此。现在,问题是 $rowCount 返回 '0' 而数据库有超过 15 条记录,其中 episodeDate 小于变量 loaddate。

可能是什么问题?连接正常,查询也没有返回任何错误。

【问题讨论】:

  • 你试过在 PhpMyadmin 上运行查询吗?这可能是一个逻辑错误。
  • 请检查episodeDate的日期格式和这个$loaddate。它们是一样的吗?

标签: php mysql select


【解决方案1】:

这 2 个子查询很容易用连接替换,并且它们仅在子查询返回一行的情况下起作用:查询仍将在都返回一行的实例中运行。

确保您的日期格式为“YYYY-MM-DD HH:MM:SS”:

$query = mysqli_query($con, "
SELECT * 
FROM episode
INNER JOIN drama 
ON episode.dramaID = drama.dramaID 
AND drama.popularity NOT IN ('5','6')
WHERE episode.episodeDate < '$loaddate' 
ORDER BY episode.episodeDate DESC");
//number of rows
echo $rowCount = mysqli_num_rows($query);

【讨论】:

  • 感谢您的指导。我学会了一种更好的编写子查询的方法。
【解决方案2】:

我不认为日期比较与“没有结果”有关。找出有多少记录选择其他两个子查询从受欢迎程度 = '5' 的戏剧中选择戏剧 ID 并从受欢迎程度 = '6' 的戏剧中选择戏剧ID 会很有趣。 如果他们每人带来一张唱片,那么请尝试

"SELECT * FROM episode where episodeDate < '$loaddate' order by episodeDate desc"

如果不是,您可能需要将查询更改为

"SELECT * FROM episode where episodeDate < '$loaddate' 
and dramaID not in (select dramaID from drama where popularity = '5') 
and dramaID not in (select dramaID from drama where popularity = '6') 
order by episodeDate desc"

【讨论】:

  • 谢谢兄弟!有效。但我仍然不明白我的查询出了什么问题。你能帮我解释一下吗?
  • 很好!那么“等于”或“不等于”运算符用于比较两个“事物”,例如dramaID = 554。当您希望与多个值进行比较时,请使用“in”或“not in”运算符,例如 dramaID in (123,456,789)。有时,您可能有一个像上面那样的选择子查询,而不是固定值。
  • 太棒了!现在我也明白了:)谢谢
猜你喜欢
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2019-01-07
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多