SQL oder PHP - Zellen zusamenführen
Hallo!
Ich suche nach einer SQL-Lösung in Access oder PHP, um mehrere Feldinhalte in eine Zelle zu schreiben, wenn die Inhalte in einem anderen Feld gleich sind.
Beispiel
Ausgangstabelle siet so aus:
|Auftrag |Art-Nr |Preis|
|1001 |123 |1,00 |
|1001 |345 |2,00 |
|1001 |567 |3,00 |
|1002 |123 |1,00 |
|1002 |345 |2,00 |
Gewünschte Ergebniss:
|Auftrag |Art-Nr |Preis|
|1001 |123, 345,567 | |
|1002 |123, 345 | |
Ist sowas mit SQL/PHP möglich, hat jemand einen Einsatz?
Ich suche nach einer SQL-Lösung in Access oder PHP, um mehrere Feldinhalte in eine Zelle zu schreiben, wenn die Inhalte in einem anderen Feld gleich sind.
Beispiel
Ausgangstabelle siet so aus:
|Auftrag |Art-Nr |Preis|
|1001 |123 |1,00 |
|1001 |345 |2,00 |
|1001 |567 |3,00 |
|1002 |123 |1,00 |
|1002 |345 |2,00 |
Gewünschte Ergebniss:
|Auftrag |Art-Nr |Preis|
|1001 |123, 345,567 | |
|1002 |123, 345 | |
Ist sowas mit SQL/PHP möglich, hat jemand einen Einsatz?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52203355816
Url: https://administrator.de/contentid/52203355816
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
14 Kommentare
Neuester Kommentar
Zitat von @highpriest:
Ich suche nach einer SQL-Lösung in Access oder PHP, um mehrere Feldinhalte in eine Zelle zu schreiben, wenn die Inhalte in einem anderen Feld gleich sind.
Die gesuchten Stichwörter dürften TRANSFORM und PIVOT sein.
Wohl eher GROUP_CONCAT oder vergleichbares.
https://mariadb.com/kb/en/group_concat/
https://mariadb.com/kb/en/group_concat/
Zitat von @ukulele-7:
Welches SQL DBMS in welcher Version ist im Einsatz?
MS Access in einer unbekannten Version
Zitat von @mbehrens:
MS Access in einer unbekannten Version
Zitat von @ukulele-7:
Welches SQL DBMS in welcher Version ist im Einsatz?
MS Access in einer unbekannten Version
Vade retro satana
Wenn PHP im Spiel ist, gehe ich einfach mal von MariaDB oder MySQL aus.
Zitat von @highpriest:
Das wäre evt. eine Lösung, wie würde es aussehen?
In PHP durchläufst du die nach Auftrag sortierte Ergebnistabelle und ...
... solange "Auftrag" dieselbe ist, ...
werden die "Art-Nr" mit üblichen String-Funktionen und Kommas, Leerzeichen aneinndergehängt ...
... solange "Auftrag" dieselbe ist, ...
werden die "Art-Nr" mit üblichen String-Funktionen und Kommas, Leerzeichen aneinndergehängt ...
Das wäre evt. eine Lösung, wie würde es aussehen?
Kann es gerade nicht getestet liefern:
$Result = [DBQuery]
$Artikel="";
While( ){ ## $Result durchlaufen
$Row = $Result.[Row]!
if ($Artikel <> $Row.[Artikel]){
$Artikel = $Row.[Artikel];
$Art-Nr = "";
}
if ($Art-Nr <> ""){
$Art-Nr .= ", ";
}
$Art-Nr .= $Row.[Art-Nr];
}
##Ausgabe der Werte
} ## $Result Durchlauf Ende
Da sind sicher Fehler drin in Ablauf oder Variablen, etc ...
... evtl. postet ja noch jemand eine getestete / korrigierte Version ...
Zitat von @highpriest:
Das ist MS Access 2010 als Datenbank, über XAMPP auf der Webseite mit PHP sollen Ergebnisse angezeigt werden.
Okay bei Access hast du nicht wirklich viele Möglichkeiten, vielleicht sogar gar keine. Dann mach das besser mit PHP.Das ist MS Access 2010 als Datenbank, über XAMPP auf der Webseite mit PHP sollen Ergebnisse angezeigt werden.
Ausgangslage in Access, Tabelle Aufträge:
VBA Modul in Access anlegen und die Funktion einfügen
Dann neue Abfrage erstellen und in der SQL Ansicht das hier einfügen
Oder über die GUI
Ergebnis nach Ausführen der Abfrage:
Alternativ wenn über PHP bspw. eine MYSQL Abfrage die so aussieht
VBA Modul in Access anlegen und die Funktion einfügen
Public Function ConcatValues(strField As String, strTable As String, WhereCondition As String, delimiter As String) As String
On Error Resume Next
Dim rec As Recordset, final As String
Set rec = CurrentDb.OpenRecordset("SELECT " & strField & " FROM " & strTable & " WHERE " & WhereCondition)
rec.MoveFirst
While Not rec.EOF
final = final & rec.Fields(strField).Value & delimiter
rec.MoveNext
Wend
ConcatValues = Left(final, Len(final) - Len(delimiter))
End Function
Dann neue Abfrage erstellen und in der SQL Ansicht das hier einfügen
SELECT
First(Auftragsnummer) as Auftragsnummer,
ConcatValues("Seriennummer","Aufträge","Auftragsnummer = """ & Auftragsnummer & """",",") AS Seriennummern
FROM
Aufträge
GROUP BY
Auftragsnummer;
Oder über die GUI
Ergebnis nach Ausführen der Abfrage:
Alternativ wenn über PHP bspw. eine MYSQL Abfrage die so aussieht
SELECT
Auftragsnummer,
GROUP_CONCAT(Seriennummer) AS Seriennummern
FROM
Aufträge
GROUP BY
Auftragsnummer;
Großes Lob an @11078840001 für die wirklich ausführliche Beschreibung von gleich zwei Varianten: VBA Funktion in Access oder PHP. Mein "mit Access keine Lösung" bezog sich natürlich auf reines SQL in Access, das ist ja leider sehr beschränkt (Es geht aber noch dünner wie ich immer wieder mal feststellen muss ).