查询多个位置和同一行

时间:2019-08-21 04:39:52

标签: mysql laravel-5.6

我想显示具有以下多个字符的学生数据(例如:帅气和聪明),如果学生既没有两个字符又没有一个字符,则学生必须同时拥有两个字符,然后不要显示

我尝试使用此代码,但是所有包含字符(帅气和聪明)的数据都会出现

示例:

$data = DB::table('student')->whereIn('characters', ['handsome','smart'])->get();

3 个答案:

答案 0 :(得分:0)

您可以将约束链接到哪里以及查询的add或子句。 orWhere方法接受与where方法相同的参数:

$users = DB::table('student')
                    ->where('characters', 'handsome')
                    ->orWhere('characters', 'smart')
                    ->get();

答案 1 :(得分:0)

针对此要求的有效的原始MySQL查询如下所示:

SELECT s1.*
FROM student s1
INNER JOIN
(
    SELECT id
    FROM student
    WHERE character IN ('handsome', 'smart')
    GROUP BY id
    HAVING COUNT(DISTINCT character) = 2
) s2
    ON s1.id = s2.id;

我们可以尝试编写以下Laravel代码:

$characters = DB::table('student')
    ->select('id')
    ->whereIn('characters', ['handsome','smart'])
    ->groupBy('id')
    ->havingRaw('COUNT(DISTINCT character) = 2');

$matches = DB::table('student s1')
    ->joinSub($characters, 's2', function ($join) {
        $join->on('s1.id', '=', 's2.id');
    })
->get();

此答案假定student表的主键列称为id。如果还需要其他名称,请更新我的代码段以使其与之匹配。

答案 2 :(得分:0)

在查询中放入where子句,如下所示:

$student = \DB::table('student')
->whereExists(function ($query) {
$query->orWhere('characters', 'handsome')
->orWhere('characters', 'smart');
 })->get();