Kann ich zwei Zeilen zusammenfassen?

Liebe/-r Experte/-in,
kurze Frage mal wieder:
Ich habe eine Tabelle taetigkeiten:
id, zeit, datum,wer,…

Nun möchte ich das Ganze zusammenfassen.

Rauskommen soll sowas wie:
mike|21.03.2010, 22.03.2011, 13.09.2011|18 h|
silke|12.03.2011, 11.09.2011|11 h|

Also eine Übersicht wieviel zeit x für den Verein tätig war. Die Zahlen kann ich mit sum aufaddieren. und die Leute ,it group by zusammenfassen. Was mache ich mit dem Datum?
Für Mike existieren zB 3 Einträge, für Silke 2.

Kann ich die Datumsfelder irgendwie verknüpfen?

Danke für eure Mühe!
Gruß
Oliver

1 Like

Hallo,

mal abgesehen von der Tatsache, das Du in keiner Weise dein Datenbanksystem genannt hast.
Ich gehe mal von einer primitiven Access-DB aus.

Da ist das definitiv nicht möglich, was du vorhast.

MSSql würde das über eine Unterabfrage machen können und MySQL über die Funktion Group_Concat.

HTH

Gruß
Proteus

Hallo,
etwas wenig Infos…was für eine Datenbank ist das? MySQL? Falls du MySQL mit PHP nutzt, dann würde ich so etwas machen:

Zuerst alle Namen auslesen und in ein Array speichern. Doppelte Einträge vermeiden.

Dann das Array durchgehen für jeden Namen eine Abfrage starten:

SELECT zeit FROM tabelle WHERE name = ‚Name‘

Die Ausgabe und Formatierung erfolgt dann wieder in PHP.

Das ist sicher nicht die ressourcenschonendste Lösung aber vermutlich die schnellste und einfachste.

Servus,

Anleitung gilt für php:

Hole in eine Variable ($Datum).

/*
MYsql Zeugs…
*/

$ArDatum = explode(’,’, $Datum);
$AnzahlArbeitstage = count(ArDatum);

Für die Zukunft: Speicher für jeden Arbeitstag eine Zeile in der db. Bei der bisherigen Verfahrensweise wirst du noch mehr Überraschungen erleben bei deren Lösungen du dir das Hirn ausrenkst. Und irgendwann kommst du an einen Punkt an dem es nicht mehr lösbar ist.

Wenn du eine Zeile pro Arbeitstag hast, dann wäre das jetzt mit MYsql ein Klacks gewesen.
mysql_num_rows().

widecrypt

Hi,
danke für Deien superschnelle Antwort!

Mist weniger ist mehr ist halt nicht immer richtig. :wink:
Es ist eine my-sql.

Ich habs nun über ein sub-Query gemacht. Nicht schön…

Gruß
Oliver

Hi,
danke für Deine superschnelle Antwort!

Ist eine mysql. War wieder zu schnell.
Habs erstmal via sub-query gelöst.
Nicht schön, tuts aber erstmal!

Gruß
Oliver

Hi,
danke für deine superschnelle Antwort.
Mist, natürlich, php mysql.
Es ist jeder Gang in einer Zeile gespeichert.

mike|21.03.2010, 22.03.2011, 13.09.2011|18 h|
silke|12.03.2011, 11.09.2011|11 h|

ist das Ergebnis. Also die Summe der zeit von mike, silke usw.
Habs nun erstmal via subquery gelöst. Nicht schön, tut aber.
Gruß

Oliver

Hallo,

wenn ich diese Anforderung umsetzen müsste, würde mich erst einmal interessieren, mit welcher Datenbank ich es zu tun habe.
Bei MS SQL ab 2005 kann ich dies in einer Abfrage lösen.
Bei MS SQL

Hi Manfred,
sorry war wieder zu schnell! :wink:
Daher danke für Deine Mühe.

Es ist mysql. Derzeit habe ich es über eine subquery gelöst. Nicht schön, aber anders weiss ichs derzeit nicht.

Gruß
Oliver

Hallo Oliver,

leider steht meine Glaskugel im Büro. Mit welchem Tool arbeitest Du?
Mit Excel kein Problem (zusätzliche Spalte(n) notwendig), mit SQL ohne einer Sprache, die die Ausgabe steuert, keine Chance (hängt mit der variablen Anzahl der Möglichkeiten zusammen(*)).

MfG Georg V.

P.S.: (*) Was anderes ist, wenn die möglichen Aktionstage sozusagen fest vorgegeben sind. Aber das Statement sollte man sich generieren lassen, womit man wieder bei der Toolfrage angelagt wäre …

Hi Georg,
danke für deine Antwort!
mist war zu schnell. Mysql und php. Habs im Mment als subquery. Nicht schön, tut aber…

Gruß
Oliver

Hallo Herr Eikel,

vielen Dank für Ihre Anfrage und entschuldigen Sie bitte die späte Antwort. Wahrscheinlich haben Sie die Lösung auch bereits anderweitig gefunden.

Für den Fall, dass dem nicht so sei - hier meine Lösung.

Ich würde das ganze programmatisch lösen, also nicht SQL Seitig, sondern in einem Skript (zum Beispiel php).

Gruß
Sven

Hallo,
danke für die Antwort.
Ich habs nun tatsächlich gelöst. Über einen subquery und php . Nicht schön, tut aber. Ach ja und aus den Zeilen mit doppelten Einträgen habe ich zwei gemacht.

Komisch ists aber schon. Da aus unterschiedölichen Tabellen ists kein Problem…

Gruß
Oliver

Hallo,

ich denke mit nem select * auf die Tabelle und einer foreachschleife welche die Daten in ein Array schreibt mit dem Namen des Vereinsmitgliedes wäre das ganze ein quasi 13 Zeiler :smile:

<?php $db = mysql_connect(HOSTNAME,DBUSER,DBPW);
mysql\_select\_db(DBNAME,$dblink); $result = mysql\_query("SELECT \* from ".TABLE\_NAME); $resultArr = array(); while($row = mysql\_fetch\_array()){ $resultArr[$row[SPALTENNAME\_NAME]][] = $row[SPALTENNAME\_DATUM]; } foreach($resultArr as $name=\>$dates){ $str = "$name|"; foreach($dates as $date){ $str .= $date.","; } $str = substr($str,strlen($str)-1); echo $str." ; } ?\> Gruß Sven

Hi,
falls du die Lösung nicht schon hast, inzwischen:

SELECT 
 `wer`,
 GROUP\_CONCAT(DISTINCT `datum` ORDER BY `datum` SEPARATOR ', ') AS `Tage`,
 CONCAT(SUM(`zeit`), ' h') AS `Stunden`
FROM `taetigkeiten`
GROUP BY `wer` ;

die Funktion GROUP_CONCAT ist eine Aggregatfunktion wie SUM, COUNT usw.
Weil taetigkeiten.zeit numerisch sein muss, um aufsummiert zu werden, muss das ‚h‘ per CONCAT nach dem SUM angefügt werden,

Hi,
eine Lösung habe ich. Allerdings via php.
Danke sehr. Mal sehen, vielleicht probeire ich beide aus und schaue mal, ws besser ist.
Prinziepiell würde ich gerne so viel wie möglich via sql machen.Und das h kannte ich noch nicht. :smile:

Und ich habe die DB nun umgestellt, dass einfach pro Zeile nur ein Datum genannt wird und pro Zeile 1x Material (Farbe, Holz).
Danach einfach eine sub-Query und das Datum in ein Array.

Deine Lösung ist sauberer!
Gruß

hi,

mit der GROUP BY anweisung.

cu
harald
*******************

Hi,

tut mir leid dass ich auf deine Anfrage nicht geantwortet habe da ich die eMail-Addresse die ich bei wer-weiss-was.de angegeben habe für ca. ein Jahr nicht genutzt habe.

Ich hoffe dir konnte in der Zwischenzeit jemand anderes weiterhelfen.

Bis bald,

Daniel

Hi Daniel,
kein Problem. Trotzdem Danke für die Rückmeldung.
Ist halt bei einem freiwilligem Forum!

Group by ist zwar richtig, aber irgendwie passt das Ganze nicht.
Weil group by nach Datum tuts niht, weil es uU auch zwei logistisch verschiedene Datensätze sein können.
Gleiches für group by „ausführender“.

Na mal sehen
Gruß
Oliver