Получить активные и неактивные записи из таблицы - PullRequest
0 голосов
/ 26 октября 2018

У меня есть две таблицы, например:

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, если это невозможно, просто предложите мне запрос на просьбу помочь мне связать это ..

Ответы [ 4 ]

0 голосов
/ 26 октября 2018

Используя 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_count ", который даст вам желаемый счет из связанной таблицы

Подсчет связанных моделей

Для активных / неактивных студентов вы можете написать как

$activeStudents = App\Student::has('details')->count();
$inActiveStudents = App\Student::doesntHave('details')->count();
0 голосов
/ 26 октября 2018

Вы можете использовать идентификаторы groupBy для подсчета каждого идентификатора, оставив соединение таблицы student_details с таблицей студентов.

 DB::table('student')
                ->leftJoin('Tbl_student_details ', 'student.id', '=', 'Tbl_student_details .id')
                ->groupBy('student.id')->count();
0 голосов
/ 26 октября 2018
  • Чтобы рассмотреть всех студентов из таблицы 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 
0 голосов
/ 26 октября 2018

Вы можете попробовать использовать левое соединение и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...