Mehrere "rows" in einer "row" ausgeben

Daniel91

Benutzer
Beiträge
8
Hallo liebe Community,

ich bin noch "blutjunges" Mitglied hier und habe mich frisch registriert.
Bitte seht es mir ggf. nach, wenn am Anfang nicht alles perfekt funktioniert :)

Ich habe eine Frage an euch:

Ich frage aktuell aus einer MySQL-Datenbank eine gewisse Spalte ab und möchte die Inhalte dieser Spalte (also alle "rows") in Telegram in einer Nachricht ausgeben (durch einen Telegram-Bot).
Leider jedoch, wirft mir der Telegram-Bot für jede neue "row" eine einzelne Nachricht aus - das wird bei mehreren "rows" dann doch unübersichtlich und etwas viel :D

Wie bekomme ich es hin, dass ich mehrere "rows" in eine "row" packe und lediglich eine Nachricht ausgebe?
Ggf. würde ich dann eine Funktion nutzen, welche ich einfach mittels Variable durch den Telegram-Bot ausgeben lasse.

Mein aktuelles Script sieht wie folgt aus:

if($command_arr[0] == "/konzessionen") >> /konzessionen ist für den Telegram-Bot
{
$abfrage = "SELECT *, NAME AS Mapname FROM company_concession cc JOIN concession c ON c.id = cc.concession_id WHERE licence_till > UNIX_TIMESTAMP();";
$ergebnis = mysqli_query($db, $abfrage);
//$msg = "";
while($row = mysqli_fetch_object($ergebnis))
//$msg .= $row->Mapname;
sendMessage($bot_id,$json_out->message->chat->id,$row->Mapname); >> SendMessage für Telegram-Bot
}

####

Es geht mir speziell um die Inhalte aus "$row->Mapname".
Diese möchte ich in eine einzelne Zeile komprimieren und dann ausgeben lassen.

Ich danke euch im Voraus für eure Unterstützung, wünsche euch eine schöne Vorweihnachtszeit.
 
Werbung:
Ergänzung:

ich mache das mal an einem Beispiel fest - zum besseren Verständnis:

in der Spalte "Mapname" befinden sich insgesamt 10 Einträge, dies sind z.B.:
* Map 1
* Map 2
* Map 3
usw....

Diese möchte ich in eine Variable zusammenfassen, sodass mir der Telegram-Bot den Inhalt der Variable als eine einzelne Nachricht ausgibt - also wie folgt:
Map 1, Map 2, Map 3

Ich hoffe, dass ich das verständlich beschrieben habe. :/
 
Hallo,

**GROUP_CONCAT* ist dein Freund.

Ändere mal deine Anfrage auf:


"SELECT *, GROUP_CONCAT(NAME) AS Mapname FROM company_concession cc JOIN concession c ON c.id = cc.concession_id WHERE licence_till > UNIX_TIMESTAMP();";

Gruß

Bernd
 
Hallo Bernd,

vielen Dank erst einmal, dass du mir unter die Arme greifst ;)

Ich habe dies nun einmal so geändert, wie du mir vorgeschlagen hast, allerdings wirft der Telegram-Bot dann keinerlei Nachricht mehr aus:


if($command_arr[0] == "/konzessionen")
{
$abfrage = "SELECT *, GROUP_CONCAT(NAME) AS Mapname FROM company_concession cc JOIN concession c ON c.id = cc.concession_id WHERE licence_till > UNIX_TIMESTAMP();";
$ergebnis = mysqli_query($db, $abfrage);
//$msg = "";
while($row = mysqli_fetch_object($ergebnis))
//$msg .= $row->Mapname;
sendMessage($bot_id,$json_out->message->chat->id,$row->Mapname);
}
 
Ein select *, aggregate_function(spalte) from table OHNE Gruppierung kann auch nicht gehen, und ein Select * ist auch noch, gerade bei einer Aggregation, eine GANZ schlechte Empfehlung.
 
Hallo @akretschmer

danke auch an dich für deine Hilfe.

Wie würdest du es dann lösen?
Ich bin noch nicht so mega tief in MySQL drin, daher ist es für mich leider noch nicht so ganz nachvollziehbar, was du mir sagen möchtest.

Danke im Voraus.
 
wenn man aggregiert (dieses group_concate ist eine Aggregation) müssen ALLE Spalten im Result ENTWEDER aggregiert ODER gruppiert sein. So will es die Logig. Leider weiß MySQL das nicht und liefert ein völlig zufälliges und falsches Ergebniss. Daher (und aus ca. 100.000 anderen Gründen) verwende ich kein MySQL.
 
Okay.
Naja, ich bekomme die Daten aus einem anderen System in eine MySQL-Datenbank bereitgestellt und habe leider keine andere Möglichkeit, diese zu konsumieren. :/
 
Werbung:
Dieses Problem ist gelöst :)
Es lag daran, weil ich in meiner MySQL-Connect den Zusatz bzgl. UTF8 vergessen hatte (Text wurde nicht richtig ausgegeben).
 
Zurück
Oben