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

Php 从表中获取活动和非活动记录,php,mysql,sql,laravel,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 | ....................

我有两张桌子,像:

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中进行查询如果不可能,请建议我查询请帮助我关联这一点。

你可以尝试在

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

通过左键将student_details表与student表连接,可以使用groupBy id获取每个id的计数

 DB::table('student')
                ->leftJoin('Tbl_student_details ', 'student.id', '=', 'Tbl_student_details .id')
                ->groupBy('student.id')->count();
  • 为了从学生>代码>表中考虑所有学生,你需要使用 Leun-Eng/<代码>,这样即使在<代码> TBLL SubjiStime表中没有匹配的行,你仍然会考虑所有的学生。
  • 功能可用于统计非活动/活动学生
    Count()
    函数不计算
    NULL
    值;因此,我们可以使用表达式来统计非活动学生(
    NULL
    ,因为行不匹配)
  • 为了计算活动学生的唯一数量,我们需要使用
    count(Distinct..)
    ,因为
    Tbl\u student\u details
    表中的
    student\u id
    有重复的行
请尝试以下查询:

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 

使用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');
    }
}
通过查询生成器,您可以得到计数为

$students = App\Student::withCount('details')->get();
上面将返回所有学生以及属性“details\u count”,该属性将为您提供相关表中所需的计数

对于积极/不积极的学生,您可以按如下方式编写

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

根据您的样本数据,预期的输出是什么?此外,从长远来看,存储年龄没有任何意义,否则您必须每年自动增加年龄。在非活动状态上使用左连接,带有
为NULL Tbl_student_详细信息。id
对其他状态使用标准连接(内部连接)。您是否使用Larvel关系?Capt.Teemo@在您的模型中使用DB:Raw。你有关系吗?