2010-08-06 91 views
0

我在努力計算有多少文章已經評分,所以我知道有多少結果要顯示在頁面上。但我似乎無法讓代碼正常工作,有人可以幫忙嗎?MySQL聚合問題

感謝您的幫助!

這是我到目前爲止。

SELECT students.*, students_essays.*, COUNT(students_essays.id) 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
INNER JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 

它應該看起來像我的分頁下面的代碼。

$q = "SELECT COUNT(id) FROM students_essays"; 
$r = mysqli_query ($mysqli, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli)); 
$row = mysqli_fetch_array ($r); 
$records = $row[0]; 

以防萬一這是我的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) 
); 

這是錯誤消息。

Error: 1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause in 
+2

它以什麼方式不起作用?一個錯誤信息會很有用 – Cfreak 2010-08-06 18:29:59

回答

1

好吧,我根據手頭的信息猜測這裏...

$q = "SELECT COUNT(id) FROM students_essays se INNER JOIN essays_grades eg ON se.id = eg.students_essays_id"; 

這將返回所有文章與匹配等級記錄。

+0

你的代碼有幫助,但是我把COUNT(id)改成了COUNT(students_essays.id)',以使代碼正常運行,謝謝。 – labs 2010-08-06 18:40:24

0
SELECT students.*, students_essays.*, COUNT(students_essays.id)... 

students.*students_essays.*返回多行,但是COUNT(students_essays.id)總是隻返回一行。根據我的經驗,MySQL僅返回行數和第一行。做你想做的最簡單的方法可能是運行兩個單獨的查詢:一個用於count,另一個用於獲取實際數據。