student_attendance table structure student 我不知道为什么我无法使用laravel 4
在mysql中正确使用左连接我的学生'表结构是:
'project2.exe': Loaded
'C:\Users\David\Documents\VisualStudio2010\Projects
\project2\Debug\project2.exe',
Symbols loaded.
'project2.exe': Loaded 'C:\Windows\System32\ntdll.dll',
Cannot find or open the PDB file
' project2.exe': Loaded 'C:\Windows\System32\kernel32.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\d2d1.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\msvcrt.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\user32.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\gdi32.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\advapi32.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\rpcrt4.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\msvcr100d.dll',
Symbols loaded.
'project2.exe': Loaded 'C:\Windows\System32\imm32.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\msctf.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\lpk.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\usp10.dll',
Cannot find or open the PDB file
'project2.exe': Loaded 'C:\Windows\System32\uxtheme.dll',
Cannot find or open the PDB file
First-chance exception at 0x698509bf in project2.exe: 0xC0000005:
Access violation writing location 0x00000000.
Unhandled exception at 0x698509bf in project2.exe: 0xC0000005:
Access violation writing location 0x00000000.
和' attendance_student'表是:
id|name
我希望在特定日期向所有学生及其现在或缺席表示。
例如,在特定的一天,如果学生缺席,其身份和日期将输入' attendance_student'表
我的查询:
id|date|student_id
但是,如果学生缺席的那一天我只能获得该学生的数据。我的问题是我想要显示该班级的所有学生。目前我只能通过这个显示缺席的学生
答案 0 :(得分:1)
您想要一个左连接,但您只是使用常规连接。您应该使用->leftJoin
答案 1 :(得分:0)
问题在于您WHERE
,请将其更改为:
->where('attendance_student.date', '=', '2015-10-14')
->orWhere('attendance_student', '=', null)
使用leftJoin时,不需要匹配。但是在你的WHERE中,它需要设置日期(日期= 2015-10-14),这与用连接替换leftJoin相同。
答案 2 :(得分:0)
所以显然你只有缺席学生的日期......(?)。
如果是这样的话...我会尝试看起来像这样的东西:
SELECT students.id, students.name, 0 as absent FROM students
WHERE students.id not in (
SELECT attendance_student.id FROM attendance_student
WHERE attendance_student.date = '2015-10-14'
)
UNION
SELECT students.id, students.name, attendance_student.present as absent
FROM students INNER JOIN attendance_student
ON students.id = attendance_student.student_id
WHERE attendance_student.date = '2015-10-14'
因此,请让所有在该特定日期出现的学生先行,然后将他们与缺席的学生联系起来。
P.S。我正在重命名"出勤率[缺席者]缺席'缺席只是为了在我们阅读时更有意义,但这并不重要。
答案 3 :(得分:0)
我遇到了类似的问题,下一个找到的解决方案
替换此
->leftJoin('attendance_student', 'students.id', '=', 'attendance_student.student_id')
为此
->leftJoin('attendance_student', function($join){
$join->on('students.id', '=', 'attendance_student.student_id');
$join->on('attendance_student.date', '=', DB::raw('2015-10-14'));
})
最后删除您的
->where('attendance_student.date', '=', '2015-10-14')
因为在进行查询时,您将强制在
中进行注册attendance_student
祝你好运!