2010-08-06 2 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

답변

1

그럼 난 손에서 정보를 기반으로 여기 추측하고 ... 일치하는 수준의 기록과 모든 에세이를 반환

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

.

+0

코드가 도움이되었지만 코드를 작성하고 실행하는 데'COUNT (IDs)'를'COUNT (students_essays.id) '로 변경했습니다. – labs

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

students.*students_essays.* 반환 여러 행하지만 COUNT(students_essays.id)은 항상 하나의 행을 반환합니다. 내 경험상, MySQL은 행의 개수와 첫 번째 행만 반환합니다. 원하는 작업을 수행하는 가장 간단한 방법은 두 개의 개별 쿼리를 실행하는 것입니다. 하나는 계산 용이고 다른 하나는 실제 데이터를 가져 오는 것입니다.