Frage zu concate
luti
- datenbank
0 Vinzenz Mai0 luti0 Vinzenz Mai0 luti
Hallo,
ich habe in meiner MySQL5-Datenbank Spaltennamen, die auf '_'.$monat enden (also xyz_1, xyz_2, ..., xyz_12); enthaltene Werte sind 0/1. Nun möchte ich eine Abfrage in der Spalte des aktuellen Monats machen. Ich habe folgendes versucht:
SELECT *
FROM abc
WHERE
CONCAT('xyz_',MONTH(NOW())) = 1
Zurückgeliefert werden aber _alle_ Zeilen, auch die mit dem Wert 0. Anscheint funktioniert das CONCAT
nicht richtig. Was mache ich da falsch? Liegt es daran, dass Text mit Zahl verbunden wird?
Dank & Gruß,
luti
Hallo,
ich habe in meiner MySQL5-Datenbank Spaltennamen, die auf '_'.$monat enden (also xyz_1, xyz_2, ..., xyz_12);
ich halte eine solche Tabellenstruktur in den meisten Fällen für keine besonders gute Idee. Sicher gibt es dafür Anwendungsfälle.
enthaltene Werte sind 0/1. Nun möchte ich eine Abfrage in der Spalte des aktuellen Monats machen. Ich habe folgendes versucht:
SELECT *
FROM abc
WHERE
CONCAT('xyz_',MONTH(NOW())) = 1
Nö. Sowas geht in normalem SQL nicht. Du kannst nicht so einfach, mir nichts, Dir nichts, einen Spaltennamen, den Du benötigst, dynamisch im Statement zusammensetzen.
MySQL 5.0: Benutze [Prepared Statements](http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html) oder baue Dein Statement in der API zusammen.
Freundliche Grüße
Vinzenz
Hallo,
danke für Deine Antwort!
ich halte eine solche Tabellenstruktur in den meisten Fällen für keine besonders gute Idee. Sicher gibt es dafür Anwendungsfälle.
Darüber kann man natürlich streiten ... ich fand, dass es in diesem Fall eine schnelle + einfache Lösung war, wenn auch nicht sonderlich elegant ;)
CONCAT('xyz_',MONTH(NOW())) = 1[/code]
Nö. Sowas geht in normalem SQL nicht. Du kannst nicht so einfach, mir nichts, Dir nichts, einen Spaltennamen, den Du benötigst, dynamisch im Statement zusammensetzen.
Grumpf. Schade eigentlich.
MySQL 5.0: Benutze Prepared Statements oder baue Dein Statement in der API zusammen.
Das geht in diesem speziellen Falle leider nicht. Dann werde ich wohl einen anderen Work-Around über die API nehmen müssen.
Dank & Gruß,
luti
Hallo,
ich halte eine solche Tabellenstruktur in den meisten Fällen für keine besonders gute Idee. Sicher gibt es dafür Anwendungsfälle.
Darüber kann man natürlich streiten ... ich fand, dass es in diesem Fall eine schnelle + einfache Lösung war, wenn auch nicht sonderlich elegant ;)
offensichtlich war es keine Lösung.
Nö. Sowas geht in normalem SQL nicht. Du kannst nicht so einfach, mir nichts, Dir nichts, einen Spaltennamen, den Du benötigst, dynamisch im Statement zusammensetzen.
Grumpf. Schade eigentlich.
Ganz im Gegenteil. Ich finde dies wunderbar und sehr sinnvoll.
MySQL 5.0: Benutze Prepared Statements oder baue Dein Statement in der API zusammen.
Das geht in diesem speziellen Falle leider nicht. Dann werde ich wohl einen anderen Work-Around über die API nehmen müssen.
Was geht nicht?
[ ] Prepared Statements nutzen
[ ] Statement in der API zusammenbauen
[ ] Stored Procedure nutzen, die Prepared Statements nutzt
Freundliche Grüße
Vinzenz
Hallo,
offensichtlich war es keine Lösung.
Naja, bis auf diese Ausnahme schon ...
Was geht nicht?
[x] Prepared Statements nutzen
[ ] Statement in der API zusammenbauen
[x] Stored Procedure nutzen, die Prepared Statements nutzt
Die Sache ist, dass ich in einem Backend einen Abfrageteil (AND ...) als Code eingebe, den ich dann in meiner Applikation wieder zusammenbaue. Das hat den Hintergrund, dass ich für verschiedene Kategorien kombinierte Suchabfragen zusammenstellen möchte. (Ohne konkret zu werden ist es wohl etwas unverständlich - sorry.) Ich gebe in einem Auswahlfeld z.B. "AND aufwand=1" ein. In der Applikation stückele ich dann zusammen "SELECT abc FROM xyz WHERE foo=faa AND aufwand=1". Meine Lösung besteht nun darin, dass ich einen Platzhalter im Eingabefeld verwende, z.B. *THISMONTH*. Beim Zusammenfügen ersetze ich dann *THISMONTH* durch 'xyz_'.$thismonth ...
Danke noch mal & Grüße,
luti