我遇到了这种奇怪的情况,不知道出了什么问题。我有一个简单的自连接来根据某些条件查找匹配项。我这个查询在 mysql 中运行良好,但是当我通过 PHP 调用它时,它不返回任何值。
select * from Requests p inner join Requests c on c.ID<>p.ID
where usr_ID<>4
and p.c_ID = c.c_ID
这工作正常,但下面的不行。
DB::table('Requests as parent')
->join('Requests as child', 'parent.ID', '<>', 'child.ID')
->where('parent.usr_ID', '<>', 4)
**->where('parent.c_ID', '=', 'child.c_ID')**
->get();
在上面的查询中,如果我删除第二个 where 条件(c_ID),它会返回正确的值。对于所有行,其值为 1。如果我将 child.c_ID 或 Parent.c_ID 替换为 1,它会再次起作用。我也尝试过其他专栏并发现了同样的问题。
有什么指点吗?
最佳答案
查询生成器根据第二个 where 条件得出的结果是:
WHERE parent.c_ID = 'child.c_ID'
因此,不要使用“普通”where()
,而是使用 whereRaw()
,它会获取您的输入并将其直接注入(inject)最终的 SQL 查询
->whereRaw('parent.c_ID = child.c_ID')
或者,您也可以在第三个参数上使用DB::raw()
->where('parent.c_ID', '=', DB::raw('child.c_ID'))
两者本质上是相同的,所以使用您更喜欢的那个。
关于php - 自连接条件在 PHP 中失败,但在 mysql 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081441/