在下面的语句中,您可以看到评论大纲。当我取消注释该行时,该语句不返回任何结果。如果我留下注释的行,我会得到图像中显示的结果,这是正确的。
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;
任何人都可以解释为什么第三个哪个陈述会导致没有结果?这是我从laravel关系调试的查询。
答案 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'
如果上述语句未返回记录,则尝试检查字符串是否具有相同的排序规则。