SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 16.07.2014, 15:35:59
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
Rechnen

Hallo Community

Mein Name ist Andy und ich bin im 4. Semester von einem Studiengang zum Systemtechniker. Nun haben wir auch Datenbank als Fach und lernen MySQL was mir erstaunlicherweise ziemlich spass macht :-D (Programmieren ist nicht so mein Ding)

Wir haben die Aufgabe bekommen eine Datenbank zu einem ERP System aufzubauen, wobei so viel Intelligenz wie möglich in der Datenbank stecken muss. Nun stehe ich leider vor einem kleine Problem, zudem ich irgendwie noch keine mir behilfliche Lösung gefunden habe. Ich versuche das mal so gut wie möglich zu erklären ;-)

Ich möchte ein View erstellen der die Artikel und deren Lagerbestände aufzeigt. In der Tabelle Artikel habe ich jedoch kein Attribut für den Lagerbestand, sondern möchte den Lagerbestand durch die Tabelle Beleg, welche die Typen Wareneingang und Warenausgang haben können, berechnen. Um es ganz einfach auszudrücken:

select * from artikel
union
select (Wareneingang - Warenausgang) as Lagerbestand

Nun sehe ich irgendwie den Wald vor lauter Bäumen nicht und komme nicht mehr weiter. Ist dies ohne Trigger überhaupt zu lösen?

Ich hoffe ich konnte mir einigermassen deutlich ausdrücken (ist nicht so meine Stärke)

Liebe Grüsse und vielen Dank für eure Hilfe
Mit Zitat antworten
  #2  
Alt 16.07.2014, 17:44:36
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Rechnen

Zitat:
Zitat von Jabberwocky Beitrag anzeigen
Warenausgang haben können, berechnen. Um es ganz einfach auszudrücken:

select * from artikel
union
select (Wareneingang - Warenausgang) as Lagerbestand
Du suchst einen Join und kein UNION. Das erst mal als ganz grobe Orientierung.
Mit Zitat antworten
  #3  
Alt 17.07.2014, 08:05:41
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Rechnen

Natürlich, war wohl bereits ein wenig durch den Wind.

select a.nummer as Artikelnummer, a.bezeichung as Bezeichnung, a.vkpreis as Verkaufspreis, sum(b.menge - c.menge) ...

Bei diesem Punkt bin ich dann steckengeblieben. a bezieht sich auf die Tabelle Artikel und b, c beziehen sich beide auf die Tabelle Beleg. Wobei ein Beleg den Ausgang darstellt und der andere dein Eingang.
Mit Zitat antworten
  #4  
Alt 17.07.2014, 08:34:42
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Rechnen

Ich bin nochmal einen Schritt weiter gekommen, jedoch erscheint ein Syntax Fehler und ich weiss nicht wieso.

create view v_Lagerbestand as
select a.nummer, a.bezeichnung, a.vkpreis, sum(b.menge - c.menge) as Lagerbestand from artikel a
inner join belegposition b on a.id = b.artikelid
inner join belegposition c on a.id = c.artikelid
inner join belegkopf e on e.id = c.belegkopfid where e.belegtypid = 2
inner join belegkopf d on d.id = b.belegkopfid where d.belegtypid = 5

Habe noch gesehen dass die Tabelle Belegkopf unverzichtbar ist, da dort bestimmt wird welcher Typ der Beleg hat. 2 bezieht sich hier auf den Ausgang und 5 auf den Eingang.

Der Fehler bezieht sich auf die letzte Linie, egal in welcher Reihenfolge ich die letzten beiden joins habe. Irgendwie stören sie sich gegenseitig, ich weiss jedoch nicht wieso :-/
Mit Zitat antworten
  #5  
Alt 17.07.2014, 09:28:18
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Rechnen

Zitat:
Zitat von Jabberwocky Beitrag anzeigen
Ich bin nochmal einen Schritt weiter gekommen, jedoch erscheint ein Syntax Fehler und ich weiss nicht wieso.

create view v_Lagerbestand as
select a.nummer, a.bezeichnung, a.vkpreis, sum(b.menge - c.menge) as Lagerbestand from artikel a
inner join belegposition b on a.id = b.artikelid
inner join belegposition c on a.id = c.artikelid
inner join belegkopf e on e.id = c.belegkopfid where e.belegtypid = 2
inner join belegkopf d on d.id = b.belegkopfid where d.belegtypid = 5

Habe noch gesehen dass die Tabelle Belegkopf unverzichtbar ist, da dort bestimmt wird welcher Typ der Beleg hat. 2 bezieht sich hier auf den Ausgang und 5 auf den Eingang.

Der Fehler bezieht sich auf die letzte Linie, egal in welcher Reihenfolge ich die letzten beiden joins habe. Irgendwie stören sie sich gegenseitig, ich weiss jedoch nicht wieso :-/
Ich denke mal, du brauchst belegkopf nur einmal zu joinen und dann je nach Typ die Menge positiv oder negativ in die Berechnung nehmen.

Davon abgesehen hast Du einen massiven SQL-Fehler: in Abfragen mit Aggregationen (sum() ist eine) müssen alle Spalten des Resultaes entweder aggregiert oder gruppiert werden. MySQL ist die dümmste DB auf diesem Planeten, weil sie diesen Fehler nicht bemerkt und irgend etwas macht, was oft dann nicht das ist, was man eigentlich will.

Falls da signifikant viele Datensätze mit der Zeit kommen wäre der Einsatz eines TRIGGERS oder einer materialized View aber überlegenswert.
Mit Zitat antworten
  #6  
Alt 17.07.2014, 10:33:09
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Rechnen

Zitat:
Zitat von pguser Beitrag anzeigen
Ich denke mal, du brauchst belegkopf nur einmal zu joinen und dann je nach Typ die Menge positiv oder negativ in die Berechnung nehmen.
Um Dir noch etwas zu helfen:

Du hast in etwa dies hier:

Code:
test=*# select * from b_header ;
 id | vz
----+----
  1 |  1
  2 | -1
(2 rows)

Time: 0,152 ms
test=*# select * from b_detail ;
 b_id | art | wert
------+-----+------
    1 |   1 |   10
    1 |   2 |   20
    2 |   2 |    5
(3 rows)
Beleg-Header und -Detail, die ID ist die Beleg-ID, vz das Vorzeichen, hier mal vereinfacht 1 und -1. Falls da 3 und 5 bei Dir ist oder so geht das ja noch immer mit case... zu regeln.art ist die Artikel-Nummer, wert ist klar.

Code:
test=*# select art, sum(vz*wert) as bestand from (select * from b_header left join b_detail on b_header.id=b_detail.b_id) foo group by art;
 art | bestand
-----+---------
   1 |      10
   2 |      15
(2 rows)
Dein aktueller Bestand.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
rechnen mit php comriker PHP Grundlagen 5 19.08.2009 17:04:57
mit Datensätzen rechnen theresa PHP Grundlagen 4 30.08.2007 11:45:51
Rechnen mi PHP-Hilfeschrei eines Anfängers Small-Talk PHP Grundlagen 7 06.01.2004 05:44:14
mySQL Datum --> in PHP mit Datum rechnen kpa.bln PHP Grundlagen 2 20.10.2003 21:42:41
Rechnen mit mySQL CpUkiller PHP für Fortgeschrittene und Experten 2 13.01.2003 16:24:27


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:58:27 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt