php - 自连接条件在 PHP 中失败,但在 mysql 中有效

标签 php mysql laravel

我遇到了这种奇怪的情况,不知道出了什么问题。我有一个简单的自连接来根据某些条件查找匹配项。我这个查询在 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/

相关文章:

mysql - 使用 PHPMyAdmin 替换 MySQL 中的字符串

laravel - Laravel 4 中的自定义电子邮件标题

jquery - 使用 AJAX 初始化数据表后使用 .row.add()

php - 将日期作为参数传递给 php 文件

PHP Laravel - 如何通过名称模板选择 mysql 表名称

php - linux (centos) 复制文件的权限

mysql - Sequelize : How to check if a substring exists in a table

php - 无法在 MySQL 数据库中添加外键

reactjs - react & 拉拉维尔 : split API and Frontend?

php - Magento:分页过滤产品集合