从表中获取活动和非活动记录

时间:2018-10-26 04:59:59

标签: php mysql sql laravel

我有两个表:

tbl student :

.................
id  | Name |Age |
.................
1   | A    |15  |
2   | B    |13  |
3   | C    |12  |
.................

另一个表格,例如Tbl_student_details:

.......................
id  | stud_id |section |
.......................
1   | 1       |A       |
2   | 1       |B       |
3   | 2       |C       |
.......................


Result Expected: 
Active student : count (2) because id 1 and 2 have records in student detail table
Inactive Student :count(1)  dont have any record in student detail table

我需要得到的是我想要活跃或不活跃的学生..

如果任何学生在student_details中都有记录,则需要这些学生和不活跃学生的计数 哪个学生在学生详细信息表中没有记录,我需要对那些学生以及不活跃的学生进行计数 我怎么才能让这个活跃和不活跃的学生有任何想法,我需要在laravel DB :: raw中查询,如果不可能的话,建议我查询pleae来帮助我解决这个问题。

4 个答案:

答案 0 :(得分:1)

  • 为了考虑来自student表的所有学生,您将需要使用Left Join,这样即使Tbl_student_details表中没有匹配的行,您也将仍然考虑所有学生。
  • 可以使用
  • Count()功能对不活跃/活跃学生进行计数。 Count()函数不计算NULL个值;因此我们可以使用Case .. When表达式来计算不活跃学生的人数(NULL由于行不匹配)。
  • 为了计算活跃学生的唯一人数,我们将需要使用Count(Distinct ..),因为您在stud_id表中的Tbl_student_details有重复的行。

尝试以下查询:

SELECT 
  COUNT(CASE WHEN tsd.id IS NULL THEN 1 END) AS Inactive_students, 
  COUNT(DISTINCT tsd.stud_id) AS Active_students 
FROM 
student AS ts 
LEFT JOIN 
  Tbl_student_details AS tsd ON tsd.stud_id = ts.id 

答案 1 :(得分:0)

您可以尝试使用左联接和CASE WHEN

select 
   s.id,
   s.`Name`,
   s.`Age`, case when sd.stud_id is null then 'In Active' else 'Active' end as `StudentStatus`
from student s left join student_details sd 
on s.id=sd.stud_id

答案 2 :(得分:0)

通过将student_details表与student表保持连接,可以使用groupBy id来获取每个ID的计数。

 DB::table('student')
                ->leftJoin('Tbl_student_details ', 'student.id', '=', 'Tbl_student_details .id')
                ->groupBy('student.id')->count();

答案 3 :(得分:0)

使用laravel,您可以为表格设置模型

class Student extends Model
{
    protected $table = 'student';

    public function details()
    {
        return $this->hasMany('App\StudentDetails');
    }
}


class StudentDetails extends Model
{
    protected $table = 'student_details';

    public function student()
    {
        return $this->belongsTo('App\Student');
    }
}

通过查询buider,您可以将计数计为

$students = App\Student::withCount('details')->get();

以上将返回所有学生以及属性“ details_count”,该属性将为您提供相关表格中所需的计数

Counting Related Models

对于活跃/不活跃的学生,您可以写为

$activeStudents = App\Student::has('details')->count();
$inActiveStudents = App\Student::doesntHave('details')->count();