mySQL: Ergebnisse zweier Spalten zu einer Spalte verbinden?
Sven
- datenbank
Hallo ihr,
ich habe Nicknames in 2 unterschiedlichen Spalten, die ich wie folgt abrufe:
(SELECT id
,id\_to
,nick\_to
,id\_from
,nick\_from
FROM db
.table
WHERE id\_from
= '1' AND recycled\_from
= '1' AND deleted\_from
!= '1')
UNION
(SELECT id
,id\_to
,nick\_to
,id\_from
,nick\_from
FROM db
.table
WHERE id\_to
= '1' AND recycled\_to
= '1' AND deleted\_to
!= '1')
Die Ergebnisse der Spalten nick\_to
und nick\_from
würde ich nun gern zu einer Spalte zusammenfassen, damit ich vernünftig danach sortieren kann. Es ist NICHT nötig, die Spalten danach wieder zu trennen... in diesem speziellen Fall können die ruhig als eine Spalte behandelt werden.
Gibt es da eine Möglichkeit mit MySQL? Ich könnte natürlich per PHP einfach beide Spalten in das gleiche Array einlesen lassen, aber vielleicht gibts ja direkt eine Lösung?
Lg
Sven
Hi Sven!
Gibt es da eine Möglichkeit mit MySQL? Ich könnte natürlich per PHP einfach beide Spalten in das gleiche Array einlesen lassen, aber vielleicht gibts ja direkt eine Lösung?
Folgendes sollte funktionieren:
SELECT
id,
id_to,
id_from, (
nick_to+
nick_from) as nick
...
MfG H☼psel
echo $begrüßung;
Folgendes sollte funktionieren:
SELECT
id,
id_to,
id_from, (
nick_to+
nick_from) as nick
Nein, im Gegensatz zu einigen Programmiersprachen lassen sich Strings unter SQL im Allgemeinen nicht addieren. SELECT 'foo' + 'bar' ergibt unter MySQL 0. Zum Stringverbinden gibt es die Funktion CONCAT().
Ich glaube aber nicht, dass das die gewünschte Lösung ist. Ich glaube nur, dass ich das Anliegen des OP nicht direkt verstanden habe. Ein paar Beispieldaten könnten aufklärend sein.
echo "$verabschiedung $name";
hi,
Folgendes sollte funktionieren:
SELECT
id,
id_to,
id_from, (
nick_to+
nick_from) as nick
Nein, im Gegensatz zu einigen Programmiersprachen lassen sich Strings unter SQL im Allgemeinen nicht addieren. SELECT 'foo' + 'bar' ergibt unter MySQL 0.
Zumindest werden Werte aus Zahlenfeldern addiert :-)
--Hotte
Hi dedlfix!
Folgendes sollte funktionieren:
SELECT
id,
id_to,
id_from, (
nick_to+
nick_from) as nick
Nein, im Gegensatz zu einigen Programmiersprachen lassen sich Strings unter SQL im Allgemeinen nicht addieren. SELECT 'foo' + 'bar' ergibt unter MySQL 0. Zum Stringverbinden gibt es die Funktion CONCAT().
Ich dachte, MySQL orientiert sich am T-SQL-Standard?
Verketten von Zeichenfolgen
MfG H☼psel
echo $begrüßung;
Ich dachte, MySQL orientiert sich am T-SQL-Standard? Verketten von Zeichenfolgen
Das wäre mir neu, dass es das (generell, außer vielleicht in einzelnen Details) tun würde. Auch Oracle beschwert sich mit "invalid number", wenn man zwei Strings addiert, die sich nicht als Zahl lesen lassen. Ich machte daraufhin noch einen Versuch mit SELECT '1' + '2' in Oracle und in MySQL und erhielt als Ergebnis jeweils 3. T-SQL hingegen ergab 12.
echo "$verabschiedung $name";
Hi dedlfix!
Das wäre mir neu, dass es das (generell, außer vielleicht in einzelnen Details) tun würde. Auch Oracle beschwert sich mit "invalid number", wenn man zwei Strings addiert, die sich nicht als Zahl lesen lassen. Ich machte daraufhin noch einen Versuch mit SELECT '1' + '2' in Oracle und in MySQL und erhielt als Ergebnis jeweils 3. T-SQL hingegen ergab 12.
Das wusste ich noch gar nicht. =)
Danke!
MfG H☼psel
Hi,
Die Ergebnisse der Spalten
nick\_to
undnick\_from
würde ich nun gern zu einer Spalte zusammenfassen, damit ich vernünftig danach sortieren kann.
Lies Dich mal in joins ein, damit löst man solche Probleme ohne zuviel Performance zu verlieren.
Gruesse, Joachim
hi,
CONCAT() ist Deine Funktion zum Verketten, geht auch mit unterschiedlichen Feldtypen:
SELECT CONCAT(url, cnt) as nick
FROM counter
url VARCHER
cnt INTEGER
--Hotte
Hallo,
CONCAT() ist Deine Funktion zum Verketten, geht auch mit unterschiedlichen Feldtypen:
SELECT CONCAT(url, cnt) as nick
FROM counter
Leider nicht. Mit concat werden die Ergebnismengen zusammengefasst.
Spalte A Spalte B
abc def
Wenn ich jetzt mache: SELECT CONCAT(a,b) as ab und mir das Ergebnis ausgeben lasse, lautet das so:
abcdef
Ich möchte als Ergebnismenge aber:
abc
def
So als wären die Mengen der Spalte B direkt in die Spalte A geschrieben. Hab ich bis jetzt leider nicht hinbekommen...
Lg
Sven
Hallo,
CONCAT() ist Deine Funktion zum Verketten, geht auch mit unterschiedlichen Feldtypen:
SELECT CONCAT(url, cnt) as nick
FROM counterLeider nicht. Mit concat werden die Ergebnismengen zusammengefasst.
Spalte A Spalte B
abc defWenn ich jetzt mache: SELECT CONCAT(a,b) as ab und mir das Ergebnis ausgeben lasse, lautet das so:
abcdef
Ich möchte als Ergebnismenge aber:
abc
def
Zeilenumbruch einbauen? Geht so:
SELECT CONCAT(url, "\n", cnt)
FROM counter
Dann stehts untereinander.
Viele Grüße,
Hotte
echo $begrüßung;
Wenn ich jetzt mache: SELECT CONCAT(a,b) as ab und mir das Ergebnis ausgeben lasse, lautet das so:
abcdef
Ich möchte als Ergebnismenge aber:
abc
defSo als wären die Mengen der Spalte B direkt in die Spalte A geschrieben. Hab ich bis jetzt leider nicht hinbekommen...
Hatte ich doch recht vermutet. Man kann bei einer Abfrage keine Ergebniszeilen zusätzlich generieren als schon Datenzeilen vorhanden sind. Entweder zwei Abfragen starten und mit UNION verbinden, was du ja schon begonnen hast. Nur solltest du dabei nick_from und nick_to in die selbe Ergebnisspalte bringen und nicht in unterschiedliche. Z.B. so:
(SELECT id, nick_from FROM ...)
UNION
(SELECT id, nick_to FROM ...)
ORDER BY 2 [*]
Alternativ kannst du mit Joins arbeiten, wobei du allerdings genau die Join-Bedingung festlegen musst, damit sich nicht alles mit jedem verbindet (was ein kartesisches[**] Produkt ergäbe).
[*] Spaltennummer verwenden oder der 2. Spalte ein Alias verpassen und das verwenden.
[**] nach Rene Descartes, nicht nach Karthago, deswegen ohne h
echo "$verabschiedung $name";