第三个MySQL中的语句打破了查询

时间:2016-11-20 01:34:49

标签: php mysql laravel

在下面的语句中,您可以看到评论大纲。当我取消注释该行时,该语句不返回任何结果。如果我留下注释的行,我会得到图像中显示的结果,这是正确的。

select 
`movies`.`id` as 'movie_id', 
`movies`.`title` as 'movie_title', 
`cnt_lists`.`id` as 'cnt_list_id',
`cnt_lists`.`list_id`,
`cnt_lists`.`listable_id`,
`cnt_lists`.`listable_type` 
from `movies` 
inner join `cnt_lists` 
on `movies`.`id` = `cnt_lists`.`listable_id` 
where `movies`.`has_poster` = '1' 
and `cnt_lists`.`list_id` in ('3285') 
# and `cnt_lists`.`listable_type` = 'App\Models\Movie' 
order by `order` desc
limit 1;

results with line commented out

任何人都可以解释为什么第三个哪个陈述会导致没有结果?这是我从laravel关系调试的查询。

2 个答案:

答案 0 :(得分:2)

这似乎是一个编码问题。您可以检查NO_BACKSLASH_ESCAPES是否打开,如果它关闭(这很可能),那么您需要转义" \"。这意味着你需要写和条件为 and `cnt_lists`.`listable_type` = 'App\\Models\\Movie'`

参考:http://dev.mysql.com/doc/refman/5.7/en/string-literals.html

更新:忘记提及,请检查" App \ Models \ Movie"周围是否有空白区域。如果不确定,您可以使用like来避免不确定性: `cnt_lists`.`listable_type` like '%App\Models\Movie%' 或者如果需要逃脱: `cnt_lists`.`listable_type` like '%App\\Models\\Movie%'

答案 1 :(得分:0)

当有任何匹配的行时,MySQL返回结果集,否则返回结果集。

  `movies`.`has_poster` = '1' and
  `cnt_lists`.`list_id` in ('3285')
   and `cnt_lists`.`listable_type` = 'App\Models\Movie' 

如果上述语句未返回记录,则尝试检查字符串是否具有相同的排序规则。