Ich habe folgende MySQL Schema:Wie wird die Übersichtstabelle mit anderen Tabellendaten in einer Zeile angezeigt?
Method table: PK id, name, comment
Okp table: PK id, FK method_id, comment
Tnved table: PK id, FK method_id, comment
Okp --many to one--> Method <-- many to one-- Tnved
Bilddarstellung:
Ich bin müssen von Methoden HTML Übersichtstabelle zeigen. Aber jede Methode (jede Zeile) könnte viele Daten aus anderen Tabellen in Feldern haben und ich muss sie alle zeigen.
Es sieht wie folgt aus:
Methods summary
+-----+-----------+--------------+---------------+-----+---------+
| id | name | All OKP data | All TNVED data| ... | Comment |
+-----+-----------+--------------+---------------+-----+---------+
| 1 | Cloth 1 | 841000 | 5007000000 | ... | Special |
| | | 842000 | 5111000000 | | |
| | | 843000 | 5112000000 | | |
| | | 844000 | ... much more | | |
| | | ...much more | | | |
+-----+-----------+--------------+---------------+-----+---------+
| 2 | Game 76 | 259000 | 6100000000 | ... | Nice |
| | | 816700 | 6200000000 | | |
| | | 880000 | 6400000000 | | |
| | | ...much more | ...much more | | |
+-----+-----------+--------------+---------------+-----+---------+
| ... | ... | ... | ... | | ... |
+-----+-----------+--------------+---------------+-----+---------+
| 999 | T-shirt 3 | 831701 | 6302600000 | ... | Bad |
+-----+-----------+--------------+---------------+-----+---------+
Ich habe versucht SQL zu verwenden JOIN aber es sieht mehrfach redundant monströs. Also ich weiß nicht, wie man Abfragen besser verwendet.
Ich bin es mit PHP gelöst, indem Sie verwandte Daten für jede Zeile mit separaten Abfragen erhalten, aber diese Lösung ist zu langsam. (In der Tat habe ich 1000+ Zeilen).
SO wie Abfragen und Anzeigen solcher Daten?
Ich verwende folgende Methode, um Informationen von der DB zu erhalten:
//Model-file pseudo-code
$result = array();
$methods = $this->db
->select('*')
->from('method')
->get()
->result();
$i = 0;
foreach ($methods as $method){
$result[$i]['method_t'] = $method;
$result[$i]['okps'] = $this->db
->select('*')
->from('okp')
->where('method_id', $method['id]')
->get()
->result();
$result[$i]['tnveds'] = $this->db
->select('*')
->from('tnved')
->where('method_id', $method['id]')
->get()
->result();
//so on
$i++;
}
ich folgende Methode Sichtstabelle zeigen:
//View-file pseudo-code
//Table header
foreach ($result as $method) {
echo '<tr>';
echo '<td>' . $method['method_t']['id'] . '</td>';
echo '<td>' . $method['method_t']['name'] . '</td>';
echo '<td><ul>';
foreach ($method['okps'] as $okp) {
echo '<li>' . $okp['id'] . '</li>';
//in fact much more data from $okp with separate template
}
echo '</ul></td>';
echo '<td><ul>';
foreach ($method['tnveds'] as $tnved) {
echo '<li>' . $tnved['id'] . '</li>';
}
//in fact much more data from $tnveds with separate template
echo '</ul></td>';
//so on
echo '</tr>';
}
echo '</table>';
Basic "Control Break" Verarbeitung in der Schleife ... Zeilen in der Reihenfolge von m. Wenn die aktuelle Zeile für dasselbe m ist (diese m_id = vorherige m_id), überspringen Sie die Ausgabe von Informationen über ein neues m. Gib nur Informationen über m aus, wenn wir ein neues m haben. Dies ist ein gängiger Ansatz. (Ich habe mich nicht mit dem in der Antwort angegebenen PHP beschäftigt.) +10. – spencer7593