Eine Abfrage zwei bedingungen mysql

Hallo,
ich habe mal wieder ein komplizierte Frage. Also: Ich möchte eine Abfrage durchführen, deren rgnisse nach Monaten Sortiert und zusammengefasst werden.

Es geht um eine Vereinsgeschichte und die Kosten. Dazu habe ich eine Tabelle gemacht arbeitseinsaetze, eine tabelle kleinmaterial, eine tabelle materialeinsatz. Nun geht Fritz hin und mäht den Rasen und braucht dafür zB sprit und danach noch etwas Rasendünger, so kleinkram halt, was immer vorrätig ist, aber halt auch betrag x pro Einheit kostet  (tabelle kleinematerial), arbeitseinsatz rasenmähen (tabelle arbeitseinsatz) tabelle materialeinsatz bekommt dann zwei Einträge id 1 (sprit) und id 2 (Rasensamen).Es kann aber sein, dass Tina nur aufräumt und kein Material braucht oder nur ein Material.>Rauskommen soll nach her sowas wie : Januar: 12 €, 24 Stunden
Febuar: 45 €, 13 Stunden
März: 8 Stunden, 0 € usw.Veruscht hatte ich das Ganze über sowas wie:
select month(arbeitseinsatz.datum) as monatszahl,sum(distinct(kelinmaterial.einheitspreis*material.menge)) as materialsumme_monat_zeit from arbeitseinsaetze ,kleinmaterial,material where kleinmaterial.lagerware=lagerware.id and einsatzmaterial_lw.einsatzid=einsaetze.einsatz_id  group by date_format(arbeitseinsaetze.datum,’%M’) order by arbeitseinsaetze.datum ascDer Knackpunkt: Bei mehr als einem Materialposten steigt die Abfrage an dem Punkt kleinmaterial.lagerware=lagerware.id aus weil es id 1 und id 2 gibt. Ich vergebe pro Arbeitseinsatz eine Nummer, damit auch mehrere Personen/Tage einem Einsatz zugeordnet werden können.EIn zweiter Ansatz war ein Array und dann die Nummer Monatsweise reinschreiben und das Ganze dann über ein subquery durchlaufen. Ist aber auch eine Sackgasse.Hoffe es ist verständich. Oder anders:Ich will eine Sterepanlage zusammestellen und habe ein Tape von Akai, Einen DVD Player von Akkai und einen cd spieler von Panasonic…Gehe ich dann hn und sage hersteller.id = bausteine.hersteller_id steigt die Abfrage aus.Any idea?Danke für eure Anregungen!
Oliver

Hallo Oliver,

Es ist leider nicht sehr verständlich. Besonders zum Schluss komme ich etwas durcheinander… Ich hoffe aber den Kern verstanden zu haben.
Was mich wundert, ist das „aussteigen“. gibt es mehrere Treffer für kleinmaterial.lagerware=lagerware.id, sollte das Ergebnis einfach mehrere Zeilen lang sein…
Eventuell gibt es in dem Fall das Problem, dass du den Monat des Arbeitseinsatzes und die summe von allen kelinmaterial.einheitspreis*material.menge ausgibst, aber nicht direkt nach month(arbeitseinsatz.datum) gruppierst, sondern nach date_format(arbeitseinsaetze.datum,’%M’)…
Wobei das ja eigentlich egal sein sollte, ob Zahl oder Wort…

Kannst du vielleicht genauer erzählen, was genau beim „aussteigen“ passiert?
mit freundlichen Grüßen
Julian

Hi Julian,
erstmal danke für die superschnelle Antwort. Mit Aussteigen meine ich, dass das Ergebnis fehlerhaft ist, sobald an einem Datum zwei Materialieln gebraucht werden, Dann istr das Ergebnis falsch.
Beispiel:
1.4.13 Farbe 22 €
2.4.13 Nägel 8 €
3. 4.13 Dachlatten 34 €

März …
April:

Hi Julian,
erstmal danke für die superschnelle Antwort. Mit Aussteigen meine ich, dass das Ergebnis fehlerhaft ist, sobald an einem Datum zwei Materialieln gebraucht werden, Dann istr das Ergebnis falsch.
Beispiel:
1.4.13 Farbe 22 €
2.4.13 Nägel 8 €
3. 4.13 Dachlatten 34 €
2.5.13 Schrauben 33 €
3.5.13 Dachpappe 120 € , Regenrohr 87 €Ergebnis
April: 64 €
Mai 33 €Die beiden anderen Materialien werden ignoriert. Ich vermute mal weil ich mit kleinmaterial.lagerware=lagerware.id die Zuordnung aus der lagerware-tabelle habe der Knackpunkt ist, weil er einmal die Zuordnung regenrohr hat und einmal Dachpappe. In einer Abfrage.Vermute mal, dass ich da was mit joins machen muss…

Oder die Struktur ist Käse. Weil sobald zwei Mitglieder tätig werden oder ein Mitglied Samstag und Sonntag was macht, ist es kein Problem.

Moin, Oliver,

habe
ich eine Tabelle gemacht arbeitseinsaetze, eine tabelle
kleinmaterial, eine tabelle materialeinsatz.

und mindestens zwei weitere. Zeig mal das Datenmodell in der Form

**Tabelle1** (<u>Key</u>, FS1, [FS2, ...,] Attr1, Attr2, ...) 
**Tabelle2** (<u>Key</u>, FS1, [FS2, ...,] Attr1, Attr2, ...)
 ... 

Gruß Ralf

Hallo ,

formatier mal dein select, das knn ich so mit : davor gar nciht mehr lesen , tztzt

SELECT
month(arbeitseinsatz.datum) as monatszahl,
sum(distinct(kelinmaterial.einheitspreis\*material.menge)) as materialsumme\_monat\_zeit 
FROM 
arbeitseinsaetze,kleinmaterial,material 
WHERE 
kleinmaterial.lagerware=lagerware.id and einsatzmaterial\_lw.einsatzid=einsaetze.einsatz\_id&nbsp; 
GROUP BY 
date\_format(arbeitseinsaetze.datum,'%M') 
ORDER BY
arbeitseinsaetze.datum asc

Wenn Du nochmal deine Tabellen hier abbilden würdest , so
mit Tabellen Struktur .

Wäre es leichter deinem geschreibe zu Folgen .

Servus,

also ganz grob vereinfacht willst du so was wie

TabelleA, sum(TabelleB), sum(TabelleC)

raushaben ? Wobei TabelleA, TabelleB und TabelleC miteinander in Beziehung stehen ?

Wenn ja: das geht schief sobald die Relationen 1:N werden, dann ver-N-fachen sich deine Summen.

Aber wie die Vorposter bereits sagten: stelle bitte erst mal dein Datenmodell dar, dann wird dir geholfen werden können.

Gruss,
SomeOne

Also:Tabelle 1: KIeinmaterial:
Spalten: id, name, max, kosten, mengeneinheit_id

Tabelle2:
mengeneinheiten:
id, name

Tabelle 3:
id, kommentar,einsatzid,kleinmaterial_id, menge,datum

In Tabelle 1 stehen: zb 1,Dachlatten,25,23,2

In Tabelle2 stehen zb:
1 l
2m
3 Stck.

In tabelle3
1, Zaun gestrichen,123,2,6,2013-2-21

Also Einsatzid 123,Farbe benutzt, 6 l gebraucht.

Wenn der aber nun bei dem gleichen Einsatz am gleichen tag, 6 l Farbe gebraucht hat und noch 20 Schrauben. Gehts schief.
Rauskommen sollen nachher die Summen der Kosten aus Tabelle 1 pro Monat.
Also Jan Material für 145 € gebraucht
Feb Material für 234 € gebraucht usw.Klarer geworden?Danke für eure MüheOliver

Das hast du in etwa geschrieben


– Tabellenstruktur für Tabelle einsatztat

CREATE TABLE IF NOT EXISTS einsatztat (
id int(11) NOT NULL AUTO_INCREMENT,
kommentar varchar(255) NOT NULL,
einsatzid int(11) NOT NULL,
kleinmaterial_id int(11) NOT NULL,
menge int(11) NOT NULL,
datum date NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


– Daten für Tabelle einsatztat

INSERT INTO einsatztat (id, kommentar, einsatzid, kleinmaterial_id, menge, datum) VALUES(2, ‚Zaun gestrichen‘, 1, 1, 2, ‚2014-01-31‘);



– Tabellenstruktur für Tabelle kieinmaterial

CREATE TABLE IF NOT EXISTS kieinmaterial (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
max int(11) NOT NULL,
kosten int(11) NOT NULL,
mengeneinheit_id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


– Daten für Tabelle kieinmaterial

INSERT INTO kieinmaterial (id, name, max, kosten, mengeneinheit_id) VALUES(1, ‚Dachlatten‘, 22, 23, 2);



– Tabellenstruktur für Tabelle mengeneinheiten

CREATE TABLE IF NOT EXISTS mengeneinheiten (
id int(11) NOT NULL,
name varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


– Daten für Tabelle mengeneinheiten

INSERT INTO mengeneinheiten (id, name) VALUES(1, ‚l‘);
INSERT INTO mengeneinheiten (id, name) VALUES(2, ‚m‘);

schwer wa

Also:Tabelle 1: KIeinmaterial:
Spalten: id, name, max, kosten, mengeneinheit_id

Tabelle2:
mengeneinheiten:
id, name

Tabelle 3:
id, kommentar,einsatzid,kleinmaterial_id, menge,datum

In Tabelle 1 stehen: zb 1,Dachlatten,25,23,2

In Tabelle2 stehen zb:
1 l
2m
3 Stck.

In tabelle3
1, Zaun gestrichen,123,2,6,2013-2-21

Also Einsatzid 123,Farbe benutzt, 6 l gebraucht.

Wenn der aber nun bei dem gleichen Einsatz am gleichen tag, 6 l Farbe gebraucht hat und noch 20 Schrauben. Gehts schief.
Rauskommen sollen nachher die Summen der Kosten aus Tabelle 1 pro Monat.
Also Jan Material für 145 € gebraucht
Feb Material für 234 € gebraucht usw.

Klarer geworden?
Danke für eure MüheOliver

Also:Tabelle 1: KIeinmaterial:
Spalten: id, name, max, kosten, mengeneinheit_id

Tabelle2:
mengeneinheiten:
id, name

Tabelle 3:
id, kommentar,einsatzid,kleinmaterial_id, menge,datum

In Tabelle 1 stehen: zb 1,Dachlatten,25,23,2

In Tabelle2 stehen zb:
1 l
2m
3 Stck.

In tabelle3
1, Zaun gestrichen,123,2,6,2013-2-21

Also Einsatzid 123,Farbe benutzt, 6 l gebraucht.

Wenn der aber nun bei dem gleichen Einsatz am gleichen tag, 6 l Farbe gebraucht hat und noch 20 Schrauben. Gehts schief.
Rauskommen sollen nachher die Summen der Kosten aus Tabelle 1 pro Monat.
Also Jan Material für 145 € gebraucht
Feb Material für 234 € gebraucht usw.Klarer geworden?Danke für eure MüheOliver

Also:Tabelle 1: KIeinmaterial:
Spalten: id, name, max, kosten, mengeneinheit_id

Tabelle2:
mengeneinheiten:
id, name

Tabelle 3:
id, kommentar,einsatzid,kleinmaterial_id, menge,datum

In Tabelle 1 stehen: zb 1,Dachlatten,25,23,2

In Tabelle2 stehen zb:
1 l
2m
3 Stck.

In tabelle3
1, Zaun gestrichen,123,2,6,2013-2-21

Also Einsatzid 123,Farbe benutzt, 6 l gebraucht.

Wenn der aber nun bei dem gleichen Einsatz am gleichen tag, 6 l Farbe gebraucht hat und noch 20 Schrauben. Gehts schief.
Rauskommen sollen nachher die Summen der Kosten aus Tabelle 1 pro Monat.
Also Jan Material für 145 € gebraucht
Feb Material für 234 € gebraucht usw.
Klarer geworden?

Danke für eure MüheOliver

Servus Oliver,

du hast anscheinend genau das vermutete Problem:

in deiner Tabelle3 würde also stehen können

1, Zaun gestrichen,123, Dachlatten, 2m
1, Zaun gestrichen,123, Farbe, 10ltr
1, Zaun gestrichen,123, Pinsel, 1 Stück

Für jedes verbrauchte Material erscheint also eine weitere Zeile

Dir fehlt jetzt Tabelle4 (ID, Kommentar, EinsatzID), die du mit Tabelle3 über die EinsatzID verknüpfst. Hiermit ermitteltst du die Summen und Anzahlen aus Tabelle3.

Also etwa
SELECT t3.ID, t3.Kommentar, t3.EinsatzID, sum(t4.Anzahl), sum(t4.Kosten)
FROM Tabelle3 AS t3
LEFT JOIN Tabelle4 AS t4 ON t4.EinsatzID = t3.EinsatzID

Hoffentlich habe ich dein Problem überhaupt korrekt erfasst, andernfalls vergiss obiges Geschwafel :wink:

Gruss,
SomeOne

lern mal posten von datenbank tabellen

phpmyadmin und auf export und dann copy paste.

so schwer kann das doch nicht sein ,
vernünftige angaben zu machen als dein verworrener dreck
denn du immer noch postest

Hallo zusammen,
ich habe die Sache noch nicht gelöst, aber auch keine weitere Zeit gefunden, mich weiter drum zu kümmern (Umzug, Stress mit Vermieter , alt und neue Wohnung noich nicht fertig. Umzug ist Samstag).Gruß
Oliver

Hi,
also nun habe ich wieder etwas Zeit. So ganz habe ich es noch nicht rübergebracht.
Also neuer Versuch:
tabelle quittungen. Da werden halte alle Ausgaben erfasst. Dabei wird unterschieden, ob es Lagerware ist (Farbe, Schrauben) oder eine Individuelle Anschaffung wie zb Gartenstühle, Grill oä. (lagerware_janein).
Ich habe tabelle einsatze:
Zaunstreichen
Rasen mähen
Vereinsheim wischen
Dann zwei Tabellen:
einsatzmaterial und einsatzmaterial_lw
Verknüpft sind die beiden Tabellen über die Quittungs_id.
Also ganz simpel: Lisa hat den Rasen gemäht und nichts gebraucht. Also steht nichts drin. Weder in einsatzmatzerial noch in einsatzmaterial_lw.
Klaus streicht den Zaun und braucht Pinsel und 2 Eimer Farbe.
Preis steht in Quittungen
Menge in den einsatzmaterial und einsatz_material_lw.

Hoffe ich habe es nu besser dargestellt?