【问题标题】:mysql WHERE clause not workingmysql WHERE 子句不起作用
【发布时间】:2013-08-09 09:12:17
【问题描述】:

我想在 where 子句中选择多个值,但它没有选择任何东西。

这是我的选择查询:

'SELECT * FROM table WHERE  id IN (4, 5)  ORDER BY id desc'

我错过了什么?

【问题讨论】:

  • 您有ID为4或5的记录吗?
  • 给我们看。另外,查询是否返回任何错误?执行查询的行是什么样的?给我们更多的工作,因为您的查询看起来合法,但我们还缺少其他部分。
  • 你真的有一个名为'table'的表吗?你真的连接到数据库吗?你真的有那些单引号作为字符串的一部分吗?
  • ID字段的数据类型是什么?如果是char,则可能会填充该值。如果有 id 为 4 或 5 的记录,一定是类型转换不匹配,否则你会得到记录。
  • 那么您必须知道该列的 实际 值是多少。

标签: php mysql where-clause


【解决方案1】:

根据您的 cmets,查询失败的原因是该列是 varchar 并且您在 IN 子句中使用了 int 值。如果您引用数字,MySQL 不会转换类型,那么您的查询将使用 varchar

http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

【讨论】:

    【解决方案2】:

    我想你的表没有 id = 4 或 id = 5 的数据。

    试试

     SELECT * FROM table WHERE  id = 4 
    

    这也会返回任何东西吗?我敢打赌没有。

    【讨论】:

      【解决方案3】:

      为什么不只是

      'SELECT * FROM table WHERE (id = '4' OR id= '5') ORDER BY id desc'

      【讨论】:

      • 因为OP要使用IN,非常好用。
      • 给猫剥皮的方法不止一种。不确定这是否值得投反对票。
      • 具有讽刺意味的是,我不是投反对票的人之一。我也不认为值得一票否决 - 我只是在指出 IN 的好处。从语法上讲,编写 IN 查询比列出许多 OR 子句要简单得多。
      • 非常正确,尽管如果您的查询中只有 2 个变量并且您无法使用 IN 使查询工作,您可能需要退后一步并确保更直接的方式有效.
      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2015-01-27
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多