我有表,'jobs',由job_id索引,以及与外键'job_id'的表讨论。
在工作中我有一个名为'summary'的专栏,在讨论中有一个名为'body'的专栏。我想在这两个表中的两个列中搜索相同的文本字符串,并返回适用的作业。
例如,如果job_id = 7的作业记录在其'summary'列中有字符串'somestring',并且讨论记录有外键job_id = 20并且字符串'somestring',我想要job_id的作业记录= 7并且job_id = 20返回。
我正在使用laravel。我找不到解决方案,这是我最接近的解决方案:
$query->join('discussions', function( $join ) use ( $search_term ){
$join->on('jobs.job_id', '=', 'discussions.job_id');
$join->where('discussions.body', 'LIKE', $search_term );
$join->orWhere('jobs.summary', 'LIKE', $search_term );
})
但这只会从我的讨论表中返回所有内容。有没有人有任何建议?
谢谢:)
答案 0 :(得分:1)
有SQL的问题。你在做什么基本上是这样的:
SELECT * FROM jobs INNER JOIN discussions ON (...) jobs.summary LIKE search_term
没有WHERE
条款,而(...)
部分因为有OR
而无关紧要(简化了一点),所以事实上你不会(不仅)将表加入key / fk对。
您只需要将这些where
移出连接闭包,它将按预期工作:
$query->join('discussions', function( $join ) {
$join->on('jobs.job_id', '=', 'discussions.job_id');
})
->where('discussions.body', 'LIKE', $search_term )
->orWhere('jobs.summary', 'LIKE', $search_term )
->get();
现在您的查询应该如下:
SELECT * FROM jobs INNER JOIN discussions ON jobs.id = discussions.job_id
WHERE discussions.body LIKE search_term
OR jobs.summary LIKE search_term
答案 1 :(得分:0)
试试这个并看看它是什么;)
$query->join('discussions', function( $join ) use ( $search_term ){
$join->on('jobs.job_id', '=', 'discussions.job_id')
->where('discussions.body', 'LIKE', $search_term )
->orWhere('jobs.summary', 'LIKE', $search_term );
})
->select('*')
->get();
编辑:我会将$query
替换为正确的DB::table('mytable')
。
DB::table('jobs')->join('discussions', function( $join ) use ( $search_term ){
$join->on('jobs.job_id', '=', 'discussions.job_id')
->where('discussions.body', 'LIKE', $search_term )
->orWhere('jobs.summary', 'LIKE', $search_term );
})
->select('*')
->get();
EDIT2:我错过了一个半圆,更正了