【问题标题】:How to use conditional for this query in Laravel 5.2如何在 Laravel 5.2 中对此查询使用条件
【发布时间】:2017-05-11 02:24:09
【问题描述】:

这里是场景

表:用户

id   | name  | grade  | subject
---- | ------|--------|------
1    | Mark  |   a    |   science
2    | Earl  |   a    |   english
3    | John  |   c    |   english
4    | Mike  |   d    |   science
5    | Matt  |   e    |   english

我想要做的是填充非重复或非重复成绩但仅适用于英语科目的成绩

所以它应该只是显示

c
e

我已经走了这么远

控制器:

$grades = user::select('grade', DB::raw('COUNT(grade) as gradecount'))
->where('subject', 'english')
->groupBy('grade')
->having('gradecount', '=',1)
->get();

刀片:

@foreach ($grades as $grade)
            {{ $grade }}
            @endforeach

但是,这个查询给出了这个

a
c
e

【问题讨论】:

  • 尝试使用 where 子句,laravel.com/docs/5.2/queries#where-clauses
  • where('subject', '=', 'english')->get()
  • 感谢 manian,但问题是“a”仍然存在。 'a' 应该在列表中。我希望 FIRST 获得所有成绩 = 1,然后是那些有主​​题 = 英语的人
  • 此查询完全符合您的预期。我在我的 laravel 实例中对其进行了测试。 $grades = User::select('grade', \DB::raw('COUNT(grade) as gradecount')) ->where('subject', 'english') ->groupBy('grade') ->拥有('gradecount', 1) ->get();

标签: php mysql controller laravel-5.2


【解决方案1】:

你会想做这样的事情:

SELECT grade
FROM Users
WHERE id IN (
    SELECT id 
    FROM Users
    GROUP BY grade
    HAVING COUNT( grade ) = 1
) AND subject = 'english'`

查询生成器有一个 ->whereIn 你应该可以使用。懒得测试了,但这样的东西可能会奏效。

$ids = user::select('id')
->groupBy('grade')
->having('gradecount', '=',1)
->get();

$grades = user::select('grade')
->whereIn('id', $ids)
->where('subject', 'english')
->get();

【讨论】:

  • 嗨@Jessica Legner,欢迎来到堆栈溢出!让我试试那些:)。我只能使用查询生成器(您的第二个代码),因为它在控制器中。但是有没有办法我也可以使用它们,你的第一个?
  • 它没有拉起任何东西。我错过了那里的东西吗?
  • 您是否在第一个块 ($ids) 中获得了您想要的项目的 ID?如果是这样,您将需要确保您正在传递 ID 数组的 whereIn。我对'gradecount'持怀疑态度。我不认为它是这样工作的。试试 ->haveRaw('COUNT(grade) = 1')。此外,您可以在 5.2 中执行原始表达式:laravel.com/docs/5.2/queries#where-clauses 5.4 文档也有一些信息:laravel.com/docs/5.4/queries#raw-expressions
  • 嗯.. 我很感激。现在试试看:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多