2010-08-06 2 views
2

Есть ли способ, с помощью которого можно подсчитать, сколько показов не оценено? ЕСЛИ так Что еще мне нужно добавить или убрать из моего кода MySQL?Задача MySQL COUNT

Спасибо за помощь заранее!

Вот мой код MySQL.

SELECT students.*, students_essays.* 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
LEFT JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 
WHERE essays_grades.grade_id IS NULL 
ORDER BY students_essays.id DESC; 

Вот мои таблицы MySQL.

CREATE TABLE students_essays (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
student_id INT UNSIGNED NOT NULL, 
content TEXT NOT NULL, 
PRIMARY KEY (id) 
); 


CREATE TABLE students (
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
student_first_name VARCHAR(255) DEFAULT NULL, 
student_last_name VARCHAR(255) DEFAULT NULL, 
pass CHAR(40) NOT NULL, 
PRIMARY KEY (student_id) 
); 


CREATE TABLE essays_grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
grade_id INT UNSIGNED NOT NULL, 
students_essays_id INT UNSIGNED NOT NULL, 
student_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
letter_grade VARCHAR(2) DEFAULT NULL, 
grade_points FLOAT UNSIGNED NOT NULL DEFAULT 0, 
PRIMARY KEY (id) 
); 
+0

Число учащихся на учебу или всего? –

+0

Я просто хочу рассчитать, сколько неклассифицированных эссе имеется в базе данных. – labs

+0

Просто комментарий к вашей структуре таблицы. Возможно ли, чтобы в эссе было более одного класса? Если нет, нет причин иметь таблицу 'essays_grades' ... вы можете просто сохранить' grade_id' непосредственно в таблице 'students_essays'. Это упростит ваши запросы. –

ответ

2

Насколько я могу видеть, что вам нужно только посмотреть на 2 стола для этого.

SELECT COUNT(*) 
FROM students_essays se 
WHERE NOT EXISTS(SELECT * FROM 
       essays_grades ge 
       WHERE se.id = eg.students_essays_id) 
2
SELECT count(*) 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
LEFT JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 
WHERE essays_grades.grade_id IS NULL 
ORDER BY students_essays.id DESC; 
+0

IIRC, звездочка в 'COUNT (*)', где нужно обратить внимание: 'COUNT (grade_id)' не будет считать строки NULL, а 'COUNT (*)' делает. – stakx

+0

+1 для правильного ответа, но оставьте заказ, если счетчик - это все, что требуется (операция впустую) – Tahbaza