kostenloser Webspace werbefrei: lima-city


MySQL-"Map" ausgeben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Ich habe eine Tabelle, die nach folgendem Muster aufgebaut ist:
    id | key | value
     0 |   x | Gurke
     1 |   x | Zwiebel
     2 |   y | Banane
     3 |   z | Apfel
     4 |   z | Birne
    Diese Daten sollen nun so ausgegeben werden:
    x: Gurke, Zwiebel
    y: Banane
    z: Apfel, Birne
    Soweit ist das auch kein Problem, dazu habe ich folgendes Statement:
    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
    htmlspecialchars
    -Behandlung, also kann ich ihn nicht direkt mit
    GROUP_CONCAT
    & Co zusammensetzen … wie lässt sich das Problem am effizientesten lösen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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.
  4. Autor dieses Themas

    hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    schrotti12 schrieb:
    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.
    Gute Idee, hat aber einige Nachteile …

    • 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
    LIMIT 5
    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).

    • 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:
    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.
    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 ;-)
  5. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!