2010-08-06 8 views
2

Existe-t-il un moyen de comptabiliser le nombre d'essais non triés qui doivent être affichés? SI donc Quoi d'autre dois-je ajouter ou enlever de mon code MySQL?Problème MySQL COUNT

Merci pour l'aide à l'avance!

Voici mon code 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; 

Voici mes tables 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

Nombre par étudiant ou total? –

+0

Je veux juste compter combien d'essais non classés il y a au total dans la base de données. – labs

+0

Juste un commentaire sur la structure de votre table. Est-il jamais possible pour un essai d'avoir plus d'une note? Sinon, il n'y a aucune raison d'avoir la table 'essays_grades' ... vous pouvez simplement stocker le' grade_id' directement dans la table 'students_essays'. Cela rendra vos requêtes un peu plus faciles à l'avenir. –

Répondre

2

Pour autant que je vous vois seulement besoin de regarder 2 tables pour cela.

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, l'astérisque dans 'COUNT (*)' est où il faut faire attention: 'COUNT (grade_id)' ne compterait pas les lignes 'NULL', tandis que' COUNT (*) 'le ferait. – stakx

+0

+1 pour la réponse correcte, mais déposez l'ordre si le compte est tout ce qui est requis (opération gaspillée) – Tahbaza