SQL Select 123_* ?

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hi,
ich habe folgendes Problem:
ich möchte per SQL alle Spalten auswählen die den namen 123_irgendwas haben!
Also zum Beispiel 123_1 und 123_2!
jetz habe ich gedacht ich versuchs einfach so:
SELECT 123_* FROM ... WHERE ...=...

möchte den befehl dann per php ausführen!

nur leider kapiert er nicht, dass er für das sternchen alles einsetzten soll!
wie mach ich des??
wenn ich für das sternchen mal was einfüge, wo es ne spalte gibt, bekomm ich das ergebnis, aber ich möchts halt unabhängig immer auslesen.


einer ne idee?
(es wär auch möglich eine schleife in php zu machen, aber da würden dann per manueller veränderung der DB vllt fehler auftreten, deshalb hätt ichs lieber so)

mfg
to
 
Glaub du musst SELECT * FROM ... schreiben also SELECT * FROM 123 WHERE...
 
nur leider kapiert er nicht, dass er für das sternchen alles einsetzten soll!
Ich glaube du hast nicht kapiert das du nur die Funktionen verwenden kannst die, die deine DB vorgibt.

Ich geh mal davon aus du verwendest MySQL. Dann kannst du mit SHOW COLUMNS FROM database LIKE '123_%' auslesen. Und wenn es nicht klappt, einfach mal in die Doku schauen.
 
nene!
meine tabelle heißt jetz in dem Fall building_production!
aus dieser Tabelle soll jetz ausgelesen werden wieviel ein Gebäude produziert (Gebäudename ist in der Spalte building_name)
Jetzt gibts immer eine Spalte für jede Stufe! Also Zum Beispiel metal_on1, metal_on2 usw.

-->
SELECT metal_on1, metal_on2 FROM building_production WHERE building_name='Gebäudename'

Allerdings hätte ich es lieber, wenn es automatisch alle Spalten die den namen metal_on (und Zahl dahinter) auswählen würden, weil es so einfacher für mich wäre neue gebäudestufen einzuführen!

@kirzzelfix: hab grad schon einige seiten die mir google gegeben hat durchgeguckt, aber ich find einfach nix passendes
 
Zuletzt bearbeitet:
Wenn du weitere Gebäudestufen auf einfache Weise hinzufügen willst, solltest die Stufen in eine eigene Tabelle auslagern.

Dann, je nachdem, ob ein Gebäude mehrere metal_on-Stufen gleichzeitig haben kann, eine weitere Tabelle anlegen, wo du für die einzelnen Gebäude die einzelnen Stufen einträgst.
Wenn ein Gebäude nur eine metal_on-Stufe (die aktuellste für diese Gebäude) haben kann, reicht eine Fremdschlüsselbeziehung in der Gebäudetabelle.

Stichworte: Normalisierung, 1:n, n:m Beziehungen.
 
jop für jede stufe gibts nur eine metal_on-Stufe!
Fremdschlüssel hab ich auch drin zur identifizierung des richtigen Datensatzes!
aber, damit der server nicht so stark belastet wird, würde ich halt gerne gleich alle werte aus der DB lesen lassen! denn wenn ich des für jeden user je nach seiner stufe extra mache, hab ich das problem, dass er jedesmal eine anfrage an die DB schickt.

hab mir jetzt schon überlegt dass ichs vllt in eine schleife mache die einfach bis zum stufenmaximum (auch in der DB hinterlegt) hochzählt und jedesmal den wert ausliest!

ist zwar net ganz so schön wie ich des eigentlich wollte, aber anders gehts anscheinend schlecht (wenn mir hier schon keiner arg weiterhelfn kann)
 
Du solltest dir wirklich Gedanken um deine Datenbankstruktur machen. Wenn es eine Variable Anzahl an Stufen gibt, dann macht man das nicht als Spalten!

Stell dir mal vor du hast eine Kundentabelle, und jeder Kunde hat mehrere Kontonummern. Da du nicht wissen kannst, wieviele Kontonummern ein Kunde hat, machst du doch in der Kundentabelle auch nicht stumpf die Spalten "Kontonummer1", "Kontonummer2", ... Du lagerst die Kontonummern in eine eigene Tabelle aus und verweist in der Kundentabelle lediglich darauf. Das gleiche Problem hast du da auch.
 
Lieber TS, google mal bitte etwas nach "Normalisierung Datenbank" und deine Probleme werden sich in Luft auflösen :)
 
* gibt es in SQL für deine gewünschte Funktion nicht, es gibt den Unterstrich _ (1 Zeichen) und das Prozentzeichen % (0 bis unendlich viele beliebige Zeichen).
Das täuscht dann aber tatsächlich nicht über eine (extrem) schlechte Modellierung hinweg.
 
Zuletzt bearbeitet:
b03ch7 schrieb:
* gibt es in SQL für deine gewünschte Funktion nicht, es gibt den Unterstrich _ (1 Zeichen) und das Prozentzeichen % (0 bis unendlich viele beliebige Zeichen).
Das täuscht dann aber tatsächlich nicht über eine (extrem) schlechte Modellierung hinweg.

Und auch das funktioniert so nur in der WHERE-Klausel und nicht im SELECT Teil für die Spalten.
Das was du vorhast, funktioniert schlicht nicht und wäre auch kaum handhabbar, da du zum Zeitpunkt der Anfrage gar nicht wüsstest, wieviele Spalten du zurückbekommen wirst.
Deswegen ist allgemein ein "SELECT * FROM ..." nicht anzuraten... Sobald man was an der darunterliegenden Struktur verändert, wird dir mit hoher Wahrscheinlichkeit so einiges um die Ohren fliegen.

LG Ben
 
Zurück
Oben