Frage zu Vorgehensweise
Q.
- datenbank
Hallo,
ich habe eine Abfrage, deren Ergebnismenge ungefähr so aussieht:
ROT | daten | daten | ID1
GRÜN | daten | daten | ID1
ROT | daten | daten | ID1
GELB | daten | daten | ID1
GRÜN | daten | daten | ID2
GRÜN | daten | daten | ID2
ROT | daten | daten | ID1
GRÜN | daten | daten | ID1
ROT | daten | daten | ID1
GELB | daten | daten | ID1
GRÜN | daten | daten | ID2
GRÜN | daten | daten | ID2
Meine Ergebnisausgabe soll aber in etwa so aussehen:
ID | ROT1 | ROT2 | ROT3 | GELB1 | GELB2 | GRÜN1 |GRÜN2 |
ID1| DATEN | Daten | Daten | Daten | Daten | Daten | Daten |
ID2| DATEN | Daten | Daten | Daten | Daten | Daten | Daten |
Löse ich sowas gleich abfragemäßig oder zumindest teilweise oder bemühe ich php hierzu?
Grüße, Q.
Hallo,
ich habe eine Abfrage, deren Ergebnismenge ungefähr so aussieht:
ROT | daten | daten | ID1
GRÜN | daten | daten | ID1
ROT | daten | daten | ID1
GELB | daten | daten | ID1
GRÜN | daten | daten | ID2
GRÜN | daten | daten | ID2
ROT | daten | daten | ID1
GRÜN | daten | daten | ID1
ROT | daten | daten | ID1
GELB | daten | daten | ID1
GRÜN | daten | daten | ID2
GRÜN | daten | daten | ID2Meine Ergebnisausgabe soll aber in etwa so aussehen:
ID | ROT1 | ROT2 | ROT3 | GELB1 | GELB2 | GRÜN1 |GRÜN2 |
ID1| DATEN | Daten | Daten | Daten | Daten | Daten | Daten |
ID2| DATEN | Daten | Daten | Daten | Daten | Daten | Daten |Löse ich sowas gleich abfragemäßig oder zumindest teilweise oder bemühe ich php hierzu?
Grüße, Q.
meine Abfrage für diese Ergebnismenge sah übrigens so aus:
SELECT
*
from tabelle_A
LEFT JOIN tabelle_A ON tabelle_A.ID = tabelle_B.ID
Grüße, Q.
Hi,
meine Abfrage für diese Ergebnismenge sah übrigens so aus:
SELECT
*
das "*" hast Du hoffentlich nur für Testzwecke eingesetzt.
Cheatah
das "*" hast Du hoffentlich nur für Testzwecke eingesetzt.
Cheatah
Genau so isses :-)
Grüße, Q.
Hi,
das "*" hast Du hoffentlich nur für Testzwecke eingesetzt.
Genau so isses :-)
dann bin ich beruhigt :-)
Cheatah
das "*" hast Du hoffentlich nur für Testzwecke eingesetzt.
dann bin ich beruhigt :-)
äh, warum "nur für Testzwecke"? Was ist schlimm am *?
frag ich mal so
Gruß, Carsten
Hi,
äh, warum "nur für Testzwecke"? Was ist schlimm am *?
dass Dein Code nicht weiß, welche Spalten zurück kommen. Ändert sich das DB-Layout, liefern Scripts bisweilen unsinnige Ergebnisse, anstatt sauber mit einem Fehler zu beenden. Merke Dir außerdem folgendes Evangelium:
Explicit is better than implicit.
Dies gilt immer und überall.
Cheatah
Hi,
äh, warum "nur für Testzwecke"? Was ist schlimm am *?
dass Dein Code nicht weiß, welche Spalten zurück kommen. Ändert sich das DB-Layout, liefern Scripts bisweilen unsinnige Ergebnisse, anstatt sauber mit einem Fehler zu beenden.
wobei diese Scripts dann auch nicht unbedingt vernünftig[tm] programmiert sind. Sich bei einem "SELECT *" auf die Reihenfolge der Spalten zu verlassen gehört aber irgendwie dazu - die Erfahrung muss man gemacht haben ;)
Darüber hinaus gibt es noch das Problem, dass viele Daten aus der DB geholt werden, die gar nicht benötigt werden. Um das Problem zu verdeutlichen: ist es z.B. notwendig, eine LONGBLOB-Spalte in die Tabelle aufzunehmen, wird diese automatisch mitselektiert und über das Netz geschickt. Und 4 GB unnützer Traffic kann eine Anwendung schonmal verlangsamen.
Gruß,
Andreas.
Hi,
Meine Ergebnisausgabe soll aber in etwa so aussehen:
_falls_ die Anzahl der Spalten dieser Ergebnismenge _vor_ dem Statement bereits bekannt ist, ist eine Lösung per SQL zumindest denkbar. Den Aufwand dazu möchte ich persönlich aber nicht wirklich betreiben.
Löse ich sowas gleich abfragemäßig oder zumindest teilweise oder bemühe ich php hierzu?
Mit PHP oder anderen Programmiersprachen, die das Ergebnis der Abfrage auszuwerten in der Lage sind, fährst Du hier deutlich besser.
Cheatah
Hi,
Meine Ergebnisausgabe soll aber in etwa so aussehen:
_falls_ die Anzahl der Spalten dieser Ergebnismenge _vor_ dem Statement bereits bekannt ist, ist eine Lösung per SQL zumindest denkbar. Den Aufwand dazu möchte ich persönlich aber nicht wirklich betreiben.
Ganz schön clever, auf die Anzahl der Ergebnismenge, bzw. um deren Wissen zu verweisen. Ist nämlich gerade auch noch so eine Sache, über die ich mir Gedanken mache ;-)
Löse ich sowas gleich abfragemäßig oder zumindest teilweise oder bemühe ich php hierzu?
Mit PHP oder anderen Programmiersprachen, die das Ergebnis der Abfrage auszuwerten in der Lage sind, fährst Du hier deutlich besser.
Prima. Mehr wollt ich gar nicht wissen. Dank Dir!
Grüße, Q.
Hi,
_falls_ die Anzahl der Spalten dieser Ergebnismenge _vor_ dem Statement bereits bekannt ist, ist eine Lösung per SQL zumindest denkbar. Den Aufwand dazu möchte ich persönlich aber nicht wirklich betreiben.
Ganz schön clever, auf die Anzahl der Ergebnismenge, bzw. um deren Wissen zu verweisen. Ist nämlich gerade auch noch so eine Sache, über die ich mir Gedanken mache ;-)
das ist nicht clever, sondern nötig: Wenn die Zahl der Spalten nicht von Anfang an bekannt ist, kann kein SQL-Statement ausgeführt werden. Ein "SELECT *" demonstriert den allerspätesten Moment, an dem die Spaltenzahl ermittelt werden kann: Das DBMS kennt die Spalten der verwendeten Tabellen aus seinen internen Daten respektive (bei Subselects) aus dem Rest des Statements. Beginnt es zu selektieren, käme jede Änderung zu spät.
Cheatah
Hallo,
wenn dein Datenbanksystem eine PIVOT funktion anbietet, wäre diese dazu geeignet. :)
Imho hat MySQL keine native Unterstützung für's Pivotieren, aber eine kurze Suche bei Google ergab folgenden Treffer:
http://en.wikibooks.org/wiki/Programming:MySQL/Pivot_table
Ciao, Frank