Abfrage über mehrere zeilen zusammenfassen
Andreas
- datenbank
0 King^Lully0 Andreas
0 wahsaga0 Andreas
0 Vinzenz Mai
Hallo Ich hab mit einer Abfrage über mehrere Tabellen das problem, dass ich eines der felder zu einem feld mit aneinandergehängtem inhalt zusammenfassen möchte...
die abfrage geht über die Tabellen:Abteilungen, Mitarbeiter und zur verbindung Mitarbeiter_ABteilungen als antwort brauche ich den mitarbeiter namen... und ein "Feld" mit den aneinandergehängten Abteilungsnamen, die Abfrage sieht bisher so aus:
$qry = $db_obj->query("SELECT distinct tbl_Mitarbeiter.id, tbl_Mitarbeiter.Name,
tbl_Mitarbeiter.Vorname, tbl_Abteilungen.Name AS Abteilung
FROM tbl_Mitarbeiter, tbl_Abteilungen, tbl_Mitarb_Abt
WHERE tbl_Mitarbeiter.id = tbl_Mitarb_Abt.FS_Mitarb
AND tbl_Abteilungen.id = tbl_Mitarb_Abt.FS_Abt
AND tbl_Mitarbeiter.EAN = '" . $kennung . "'");
mit dem zusammenfassen komme ich allerdings leider nicht weiter (habe dazu auch in verschiedenen Dokumentationen/Foren nichts gefunden) meine vermutung wäre es irgendwie mit distinct,group by, group_concat() zu machen hat aber bisher nichts funktioniert.
wäre nett wenn mir da jemand weiter helfen könnte
gruss andreas
Hallo Ich hab mit einer Abfrage über mehrere Tabellen das problem, dass ich eines der felder zu einem feld mit aneinandergehängtem inhalt zusammenfassen möchte...
Bei MS SQL Server geht das mit
SELECT
DF1 + DF2 AS DF12
FROM
DT1
Lies Dir mal die Stringfunktionen an.
Hallo Ich hab mit einer Abfrage über mehrere Tabellen das problem, dass ich eines der felder zu einem feld mit aneinandergehängtem inhalt zusammenfassen möchte...
Bei MS SQL Server geht das mit
SELECT
DF1 + DF2 AS DF12
FROM
DT1
>
> Lies Dir mal die Stringfunktionen an.
>
Danke f[r die schnellen antworten allerdings brauche ich keine verbindung von 2 verschiedenen spalten sondern m;chte mehrere zeilen yusammenfassen etwa so
wen mueller rechte bei edv und versand hat m;chte ich nicht 2 mal
id name vorname und eine der abteilungen kriegen sondern 1 mal
id name ... abteilung1 abteilung2 abteilung3
mit group concat hatte ich es schon versucht hat aber zu fehlermeldungen gefuehrt
gruss andreas
hi,
und ein "Feld" mit den aneinandergehängten Abteilungsnamen
MySQL kennt bspw. GROUP_CONCAT. Ggf. in einer Subquery einsetzen.
gruß,
wahsaga
hi,
und ein "Feld" mit den aneinandergehängten Abteilungsnamen
MySQL kennt bspw. GROUP_CONCAT. Ggf. in einer Subquery einsetzen.
gruß,
wahsaga
»»
hi
danke fuer den link allerdings finde ich da auch keinen hinweis darauf was ich falsch gemacht haben koennte siehe abfrage weiter oben, die schliessende klammer vor AS zu setzen habe ich auch versucht bringt aber auch nichts...
gruss andreas
Hallo Andreas,
group_concat() zu machen hat aber bisher nichts funktioniert.
dann machst Du entweder etwas falsch oder nutzt nicht MySQL.
Bitte poste Dein Statement mit GROUP_CONCAT() und gib das von Dir verwendete
Datenbankmanagementsystem (DBMS) inklusive Version an.
Freundliche Grüße
Vinzenz
Hallo Andreas,
group_concat() zu machen hat aber bisher nichts funktioniert.
dann machst Du entweder etwas falsch oder nutzt nicht MySQL.
Bitte poste Dein Statement mit GROUP_CONCAT() und gib das von Dir verwendete
Datenbankmanagementsystem (DBMS) inklusive Version an.Freundliche Grüße
Vinzenz
Hallo ok ich benutze mysql mit php5 und einbindung ueber mysqli und ich habe es so versucht
$qry = $db_obj->query("SELECT distinct tbl_Mitarbeiter.id, tbl_Mitarbeiter.Name,
tbl_Mitarbeiter.Vorname, group_concat(tbl_Abteilungen.Name AS Abteilung)
FROM tbl_Mitarbeiter, tbl_Abteilungen, tbl_Mitarb_Abt
WHERE tbl_Mitarbeiter.id = tbl_Mitarb_Abt.FS_Mitarb
AND tbl_Abteilungen.id = tbl_Mitarb_Abt.FS_Abt
AND tbl_Mitarbeiter.EAN = '" . $kennung . "'");
ps sorry wegen rechtschreibfehlern oder fehlenden sonderzeichen meine tastatur hat sich irgendwie auf amerikanisch umgestellt ka wieso, aber dass guck ich mir spaeter an...
gruss andreas
Hallo Andreas,
dann machst Du entweder etwas falsch oder nutzt nicht MySQL.
Bitte poste Dein Statement mit GROUP_CONCAT() und gib das von Dir verwendete
Hallo ok ich benutze mysql mit php5 und einbindung ueber mysqli und ich habe es so versucht
SELECT distinct tbl_Mitarbeiter.id, tbl_Mitarbeiter.Name,
tbl_Mitarbeiter.Vorname, group_concat(tbl_Abteilungen.Name AS Abteilung)
FROM tbl_Mitarbeiter, tbl_Abteilungen, tbl_Mitarb_Abt
WHERE tbl_Mitarbeiter.id = tbl_Mitarb_Abt.FS_Mitarb
AND tbl_Abteilungen.id = tbl_Mitarb_Abt.FS_Abt
AND tbl_Mitarbeiter.EAN = '" . $kennung . "'");
ich versuche mal, Dein Statement lesbar und für mich verständlich zu gestalten. Dazu nutze ich die explizite Join-Syntax und Alias-Namen.
SELECT
m.id,
m.Name,
m.Vorname,
GROUP_CONCAT(a.Name) AS Abteilungen, -- hier war was falsch
FROM
tbl_Mitarbeiter m
INNER JOIN tbl_Mitarb_Abt ma
ON m.id = ma.FS_Mitarb
INNER JOIN tbl_Abteilungen
ON ma.FS_Abt = a.id
WHERE m.EAN = '<irgendein wert>'
GROUP BY -- die Spalten nach denen gruppiert
m.id, -- wird, sollte man nicht vergessen
m.Name,
m.Vorname
sollte eigentlich das von Dir gewünschte zurückliefern.
Tipp: Teste SQL-Statements zuerst mit dem Client Deiner Wahl, z.B. phpMyAdmin
oder MySQL-Query-Browser oder was auch immer, bevor Du die Statements mit einer Programmiersprache wie PHP zusammenbaust.
Noch ein Tipp: Wenn Du schon mysqli verwendest, dann empfehle ich, dass Du Dir
den Luxus von prepared Statements gönnst:
http://www.php.net/manual/de/function.mysqli-stmt-prepare.php
http://www.php.net/manual/de/function.mysqli-stmt-bind-param.php
http://www.php.net/manual/de/function.mysqli-stmt-execute.php
und weitere dort verlinkte Funktionen
Freundliche Grüße
Vinzenz
Hallo Andreas,
dann machst Du entweder etwas falsch oder nutzt nicht MySQL.
Bitte poste Dein Statement mit GROUP_CONCAT() und gib das von Dir verwendeteHallo ok ich benutze mysql mit php5 und einbindung ueber mysqli und ich habe es so versucht
SELECT distinct tbl_Mitarbeiter.id, tbl_Mitarbeiter.Name,
tbl_Mitarbeiter.Vorname, group_concat(tbl_Abteilungen.Name AS Abteilung)
FROM tbl_Mitarbeiter, tbl_Abteilungen, tbl_Mitarb_Abt
WHERE tbl_Mitarbeiter.id = tbl_Mitarb_Abt.FS_Mitarb
AND tbl_Abteilungen.id = tbl_Mitarb_Abt.FS_Abt
AND tbl_Mitarbeiter.EAN = '" . $kennung . "'");ich versuche mal, Dein Statement lesbar und für mich verständlich zu gestalten. Dazu nutze ich die explizite Join-Syntax und Alias-Namen.
SELECT
m.id,
m.Name,
m.Vorname,
GROUP_CONCAT(a.Name) AS Abteilungen, -- hier war was falsch
FROM
tbl_Mitarbeiter m
INNER JOIN tbl_Mitarb_Abt ma
ON m.id = ma.FS_Mitarb
INNER JOIN tbl_Abteilungen
ON ma.FS_Abt = a.id
WHERE m.EAN = '<irgendein wert>'
GROUP BY -- die Spalten nach denen gruppiert
m.id, -- wird, sollte man nicht vergessen
m.Name,
m.Vorname
>
> sollte eigentlich das von Dir gewünschte zurückliefern.
>
> Tipp: Teste SQL-Statements zuerst mit dem Client Deiner Wahl, z.B. phpMyAdmin
> oder MySQL-Query-Browser oder was auch immer, bevor Du die Statements mit einer Programmiersprache wie PHP zusammenbaust.
>
> Noch ein Tipp: Wenn Du schon mysqli verwendest, dann empfehle ich, dass Du Dir
> den Luxus von prepared Statements gönnst:
>
> <http://www.php.net/manual/de/function.mysqli-stmt-prepare.php>
> <http://www.php.net/manual/de/function.mysqli-stmt-bind-param.php>
> <http://www.php.net/manual/de/function.mysqli-stmt-execute.php>
>
> und weitere dort verlinkte Funktionen
>
>
> Freundliche Grüße
>
> Vinzenz
Hallo vielen Dank für die ausführlichen Antworten und die links (werde ich mir heute abend auf jedenfall nochmal genauer ansehen) ;)
die sql statements habe ich mit php my admin getestet (mit dem querry-browser habe ich leider keine verbindung auf den debian-server herstellen können, kenne mich damit noch nicht aus)
leider funktionierte bisher leider noch keine bei der von dir vorgeschlagenen (sehe ich eigentlich auch keine fehler) und kriege diese meldung:
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tbl\_Mitarbeiter m INNER JOIN tbl\_Mitarb\_Abt ma ON m . id = ma . FS\_Mitar' at line 1
sorry das genaue (php myadmin) sql statement wurde irgendwie nicht mitkopiert
SQL-Befehl: Dokumentation
SELECT m.id, m.Name, m.Vorname, GROUP_CONCAT( a.Name ) AS Abteilungen,
FROM tbl_Mitarbeiter m
INNER JOIN tbl_Mitarb_Abt ma ON m.id = ma.FS_Mitarb
INNER JOIN tbl_Abteilungen ON ma.FS_Abt = a.id
WHERE m.EAN = '86'
GROUP BY m.id, m.Name, m.Vorname
LIMIT 0 , 30
(ps nr 86 muesste eigentlich funktionieren...)
Hallo
Ich habe zwar noch einen fehler gefunden (tbl Abteilungen war nicht als a definiert), die behebung hat allerdings leider immer noch nichts gebracht...
gruss andreas
Hallo Ich habe jetzt die korrekte Abfrage heraus bekommen:
SELECT m.id, m.Name, m.Vorname, Group_concat( a.Name ) AS Abteilung
FROM tbl_Mitarbeiter m, tbl_Abteilungen a, tbl_Mitarb_Abt ma
WHERE m.id = ma.FS_Mitarb
AND a.id = ma.FS_Abt
AND m.EAN = '86'
GROUP BY m.id
das komma hinter AS Abteilung war einfach nur zu viel ;)
danke für die hilfe.
gruss andreas
dann machst Du entweder etwas falsch oder nutzt nicht MySQL.
Bitte poste Dein Statement mit GROUP_CONCAT() und gib das von Dir verwendete
Datenbankmanagementsystem (DBMS) inklusive Version an.
Hallo
die genaue version ist
MySQL - 5.0.24a-Debian_2.dotdeb.0-log
gruss andreas