Sql在组合主键上返回空行,在where子句中返回另一个值

时间:2016-09-02 07:23:49

标签: php mysql sql database

我在下面的sql上得到空行

SELECT * FROM flyers WHERE fId='6' AND 'userId'='400' 

MySQL返回空结果集

(i.e. zero rows). (Query took 0.0004 sec)

但是当我使用

SELECT * FROM flyers WHERE fId='6'

显示行

0 - 0 (1 total, Query took 0.0005 sec).

因为我得到了我的结果,而且仅使用主键是正确的。

但是我不知道为什么mysql在使用AND和主键时返回空行。

注意: - fId是传单表主键。

2 个答案:

答案 0 :(得分:2)

试试这个:

  1. 对列名称使用返回刻度而不是单引号
  2. 如果userid是int数据类型,则表示您必须删除单引号userid=400

  3. 如果fid是字符串,则表示fID='6'

    SELECT * FROM flyers WHERE {FID {1}} {userId的{1}}

答案 1 :(得分:1)

您好在您的查询中,您只有一个错误,即使用uerId使用back ticks的单引号代替或不使用。

SELECT * FROM flyers WHERE fId='6' AND userId='400'  

SELECT * FROM flyers WHERE fId=6 AND userId=400// safe not to use quotes

但我建议不要因为以下原因而在数字周围使用引号

真正的问题归结为类型转换。当您将数字放在引号内时,它将被视为字符串,MySQL必须将其转换为数字才能执行query。虽然这可能需要花费很少的时间,但是当MySQL没有很好地转换你的字符串时,真正的问题就开始发生了。例如,MySQL会转换基本字符串,如' 123'到integer 123,但会将一些较大的数字(如' 18015376320243459')转换为浮点数。由于浮点可以舍入,因此查询可能会返回不一致的结果