2017-07-27 3 views
0

Ich habe eine Tabelle MySQL wie untenSo gruppieren oder marge SQL Zeilen über PHP nach Abfrage

id | roll | exam_id | course_id | marks | status 
---------------------------------------------------------- 
1 | 01001 |  1 |  1  | 56 | 1 
2 | 01002 |  1 |  1  | 68 | 1 
3 | 01003 |  1 |  1  | 55 | 1 
4 | 01004 |  1 |  1  | 67 | 1 
5 | 01001 |  1 |  2  | 54 | 1 
6 | 01002 |  1 |  2  | 59 | 1 
7 | 01003 |  1 |  2  | 62 | 1 
8 | 01004 |  1 |  2  | 63 | 1 
9 | 01001 |  2 |  3  | 61 | 1 
10 | 01002 |  2 |  3  | 48 | 1 
11 | 01003 |  2 |  3  | 22 | 1 
12 | 01004 |  2 |  3  | 39 | 1 

Jetzt habe ich die ganze Reihe mit exam_id = 1

SELECT * FROM result WHERE exam_id=1 ORDER BY course_id 

Danach haben will muss ich Diese Tabelle innerhalb von HTML anzeigen, nachdem sie gruppiert wurde, nach bedeutet eine Zeile für jede Rolle, die eine Zeilenspanne gemäß der Kursnummer der Ergebnistabelle

Roll | course_id | marks 
----------------------------- 
01001 |  1  | 56 
     |  2  | 68 
----------------------------- 
01002 |  1  | 55 
     |  2  | 67 
----------------------------- 
01003 |  1  | 55 
     |  2  | 62 
----------------------------- 
01004 |  1  | 67 
     |  2  | 63 
hat

Ich benutze Codeigniter-Framework, um dieses Projekt zu tun. Irgendwelche Vorschläge, wie ich das machen kann?

Vielen Dank im Voraus.

[EDIT] Aktuelle SQL ich, dies zu tun bin mit:

SELECT * FROM `exam_result` JOIN `course` ON `course`.`course_tab_id`=`exam_result`.`result_course` WHERE `exam_id` = '1' AND `result_status` = 1 GROUP BY `exam_result`.`exam_roll`, `course`.`course_tab_id` ORDER BY `exam_result`.`exam_roll` ASC, `course`.`course_id` ASC 
+2

Warum nicht Sie Gruppe durch Rolle in SQL-Abfrage selbst und verwenden nur die Daten auf Ihren HTML-Tabelle zu binden, oder was auch immer Sie für die Anzeige verwenden in UI – Sujith

+0

Verwendung 'array_merge'. –

+0

Ordnen Sie einfach durch roll und course_id '' 'SELECT * FROM Ergebnis WHERE exam_id = 1 ORDER BY roll, Kurs_id''' – Neodan

Antwort

0

dies versuchen, aber der Unterschied ist, dass der Kurstitel in einer einzigen Tabelle enthalten sein wird, habe ich die Markierungen als AVG gesetzt, wenn du also doppelte Daten hast, wirst du ihr durchschnittliches Ergebnis für den Kurs und die Rolle einer Schule sehen oder was auch immer du für diese Struktur f benutzt oder

SELECT roll, exam_id, a.course_id, marks, status, course_title, course_credit 
FROM 
(SELECT roll, exam_id, course_id, AVE(marks) as marks, status FROM result) as a 
LEFT JOIN 
(SELECT course_id, course_title, course_credit FROM course) as b 
ON 
a.course_id = b.course_id 
WHERE exam_id = '1' -- you can remove this if you wanted all exam appear on your list 
GROUP BY roll, exam_id, a.course_id, marks, status, course_title, course_credit 
ORDER BY roll, course_id, marks 
+0

Obwohl dies nicht mein Problem lösen, aber ich habe eine Lösung von dieser Antwort. Also danke :) – WebDevRon

+0

Was ist deine Antwort, die du gefunden hast ^^ _ kannst du es teilen? –

0

Versuchen Sie, diese SQL-Abfrage in dieser Tabelle auf meiner ersten Abfrage

SELECT Roll, course_id, AVG(marks) 
FROM result WHERE exam='1' 
GROUP BY Roll, course_id 
ORDER BY roll, course_id, marks 
+0

Dies ist meine aktuelle SQL-Abfrage. 'SELECT * FROM' exam_result' JOIN 'course' ON' course'.course_tab_id' = 'exam_result'.result_course' WHERE' exam_id' = '1' UND 'result_status' = 1 GROUP BY' exam_result'.exam_roll' , 'course'.course_tab_id' ORDER BY' exam_result'.exam_roll' ASC, 'course'' course_id' ASC ' – WebDevRon

+0

Wie viele Tabellen haben Sie, warum verwenden Sie JOIN, wenn Sie nur eine Tabelle haben. Kannst du die Struktur deines Tisches zeigen? –

+0

Eigentlich habe ich 2 verbundene Tabellen. Ich habe nur die vereinfachte Struktur meines Problems veröffentlicht. – WebDevRon

Verwandte Themen