MySQL-"Map" ausgeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
ansicht
apfel
banane
birne
code
datenbank
datum
gurke
logik
nehmen
ordern
problem
schicht
tabelle
umziehen
url
zeile
zusammenstellung
zwiebel
-
Ich habe eine Tabelle, die nach folgendem Muster aufgebaut ist:
Diese Daten sollen nun so ausgegeben werden:id | key | value 0 | x | Gurke 1 | x | Zwiebel 2 | y | Banane 3 | z | Apfel 4 | z | Birne
Soweit ist das auch kein Problem, dazu habe ich folgendes Statement:x: Gurke, Zwiebel y: Banane z: Apfel, Birne
SELECT `key`, GROUP_CONCAT(DISTINCT `value` ORDER BY `value` ASC SEPARATOR ', ') AS `value` FROM `map` GROUP BY `key` ORDER BY `key` ASC
Nun sollen diese Daten aber als HTML ausgegeben werden, sodass man auf jedes dieser Wörter (z.B. »Gurke«) klicken kann und anschließend auf eine Seite kommt, wo der Datensatz geändert werden kann. Dazu muss ich irgendwie an die ID dieser Wörter kommen, aber wie? Also das Ergebnis sollte in Etwa so aussehen:<table> <tr> <td>x</td> <td><a href="/edit/0">Gurke</a>, <a href="/edit/1">Zwiebel</a></td> </tr> <tr> <td>y</td> <td><a href="/edit/2">Banane</a></td> </tr> <tr> <td>z</td> <td><a href="/edit/3">Apfel</a>, <a href="/edit/4">Birne</a></td> </tr> </table>
Dabei muss aber Text aus der DB durch eine
-Behandlung, also kann ich ihn nicht direkt mithtmlspecialchars
& Co zusammensetzen … wie lässt sich das Problem am effizientesten lösen?GROUP_CONCAT
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also solche Zusammenstellungen würde ich in die Programm-Logik nehmen, da das meiner Ansicht nach in die Präsentations-Schicht (View des MVC) gehört.
Begründen tu ich das damit, dass die Ausgabe nicht mehr der Normalform entspricht und ich Abfragen nur zur Datenholung, aber nicht zur Formatierung verwende.
Ein weiterer Aspekt ist die Portierbarkeit der Datenbank. Da ich gerade von Oracle zu MSSQL umziehen muss, versuche ich so wenig spezifische Befehle, die nicht in allen DBMS verfügbar sind, wie möglich zu verwenden. -
schrotti12 schrieb:
Gute Idee, hat aber einige Nachteile …
Also solche Zusammenstellungen würde ich in die Programm-Logik nehmen, da das meiner Ansicht nach in die Präsentations-Schicht (View des MVC) gehört.
• Die Tabelle besteht nicht aus 10 Zeilen, sondern weit mehr, somit ist eine Verarbeitung durch MySQL bei weitem schneller.
• Habe ich das in der Programmlogik, ist soetwas wie
nicht möglich, da dann möglicherweise nicht alle zusammengehörenden Datensätze gefunden werden (außer ich starte für jede bekommene Zeile eine weitere Abfrage blah blah → langsam).LIMIT 5
• Die Datenbank kann ich leider nicht verändern, da sie bereits existiert und es sich hierbei nur um eine andere Darstellungsmöglichkeit handeln soll.
schrotti12 schrieb:
Da habe ich eher Bedenken PHP (die aktuell benutzte Sprache) zu nutzen, da der gesamte Code womöglich in näherer Zukunft nach Java portiert werden könnte
Ein weiterer Aspekt ist die Portierbarkeit der Datenbank. Da ich gerade von Oracle zu MSSQL umziehen muss, versuche ich so wenig spezifische Befehle, die nicht in allen DBMS verfügbar sind, wie möglich zu verwenden. -
Okay, verstehe ich, aber dann kann ich leider nicht weiter helfen.
Für gewöhnlich liefern SQL-Abfragen ResultSets, Arrays und ähnliches zurück, sprich: Rohdaten. Ich meine, die Daten selbst könntest du über "Distinct(key)" zusammenfassen und nacher über einen verschachtelten select alle "value"-Felder abfragen, welche in der selben Zeile den zuvor abgefragten key haben. Allerdings kommen die auch wieder als Tabelle raus und du musst sie in der Programmlogik zusammenfassen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage