2010-08-06 92 views
-1

我想指望所有的分級文章,但如果由於某種原因的文章已經被分級兩次或兩次以上的代碼將計算同一篇文章中多次已分級是有辦法可以讓確定文章只計算一次?的MySQL COUNT問題

感謝您的幫助!

這是代碼。

SELECT COUNT(students_essays.id) 
FROM students_essays 
INNER JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 

這是我的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) 
); 

感謝大家的幫助我想出了問題這甚至不是這個查詢doh!

回答

2

SELECT COUNT(DISTINCT students_essays.id)

+0

沒有工作:( – labs 2010-08-06 19:45:07

+0

@labs:您的最終問題,必須有兩個不同的行與他們同樣的students_essays.id – Borealid 2010-08-06 20:14:24

+0

有沒有一種方法,我可以將它們合併 – labs 2010-08-06 20:18:25

0

使用LEFT JOIN insted的INNER JOIN的

編輯:意義,SELECT散文,所以你只有1和LEFT JOIN,要標記

+0

?你什麼意思原諒我的無知。 – labs 2010-08-06 19:47:17

+0

試試這個: SELECT COUNT(students_essays.id) FROM students_essays LEFT JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id – 2010-08-06 20:10:33

+0

可悲的是沒有成功:( – labs 2010-08-06 20:13:45

0

添加DISTINCT到您的查詢。或者,如果你只需要ID,不與students_essays表麻煩,因爲在所有的ID是essays_grades:

select count(distinct students_essays_id) from essays_grades 
+0

沒有工作:( – labs 2010-08-06 19:46:33

+0

它怎麼不起作用?那有什麼呢? – 2010-08-06 19:47:45

+0

仍然計數重複。 – labs 2010-08-06 19:49:22