Antworten auf deine Fragen:
Neues Thema erstellen

SQL Server Abfrage über 2 Tabellen

didi01

Aktives Mitglied

Hi,
ich weis jetzt nicht ob ich hier im richtigen Forum gelandet bin.
Und zwar habe ich folgende Frage:

In meiner PHP Anwendung verwende ich als Datenbanksystem den SQL Server 2000.
Ich habe u.a. dort eine Tabelle für die Wareneingänge und eine Tabelle für die Warenausgänge (Lieferscheine). Um die Warenbewegung in aufsteigender Reihenfolge darzustellen, wollte ich eine Abfrage erstellen in der beide Tabellen enthalten sind. In beiden Tabellen befindet sich die Spalte Artikelnummer über die die Tabellen verknüpft werden (INNER JOIN). Das ist kein Problem. Das Problem ist, dass die Ausgabe nicht abwechselnd in einzelnen Zeilen dargestellt wird, sondern der Lieferschein wird in der gleichen Zeile wie der Wareneingang aufgelistet. Kann man das in einer SQL Abfrage auch so machen, dass es folgendermaßen aussieht, also erst der Wareneingang (WA) in nächsten Zeile den Lieferschein (LS) u.s.w. Als Suchkriterium gebe ich die Artikelnummer an und grenze das Datum ab, innerhalb der die Warenbewegung ausgewertet werden soll.

Beleg: Datum: Aritkel: Menge:
WA 02.01.09 ABCD 100
LS 05.01.09 ABCD 100

Wie muß ich die SQL Abfrage aufbauen um dies zu realisieren?

Vielen Dank für Eure Hilfe im Voraus.
Gruß
didi01
 

MyBad

localhorst

AW: SQL Server Abfrage über 2 Tabellen

Weiß nicht, ob ich dich richtig verstanden habe ... aber die Ausgabe, wie es dargestellt werden soll, legst du doch fest.

Verstehe das Problem glaub ich nicht so ganz:
Du bekommst mit deiner Abfrage die richtigen Ergebnisse!? Dann kannst du doch die Darstellung deiner Ergebnisse so aufbauen, wie du es haben willst.

Kann sein, dass ich grad völlig aufm Schlauch stehe!?

Edit: Kannst du vielleicht deinen QT mal posten?
 
Zuletzt bearbeitet:

Thyras

Nicht mehr ganz neu hier

AW: SQL Server Abfrage über 2 Tabellen

Wenn ich dich jetzt richtig verstanden habe, bekommst du bereits alle benötigten Informationen ermittelt. Dich stört aber, dass 2 Zeilen der späteren Anzeige in nur 1 Ergebniszeile der Abfrage stehen?

Das klingt für mich eher nach nem Problem für die Anzeigeaufbereitung und weniger der SQL. Wenn du die Informationen getrennt brauchst, dann vermisch' sie nicht in einer Abfrage.

Kannst ja mal die bisherige SQL / Tabellenstruktur posten, dann kann man da genaueres sagen. Evtl. verstehe ich das grad völlig falsch.

[edit]
@MyBad: Willkommen im Club! :D
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

Erstmal danke für Eure Mühe,

Auf der Ausgaeseite von PHP bekomme ich das auch schön angezeigt. Nur habe ich dort 2 Abfragen verwendet, die auch noch in einer for Schleife ablaufen. Und je nach dem wie groß der Abfragezeitraum ist, dauert die ganze Aktion ewig lange, teileise sogar bis zum Timeout. Nun dachte ich das ich statt 2 Abfragen alles in einer Abfrage mache (soll halt schneller gehen).

Hier mal der SQL Befehl,

hab ihn hier hin kopiert und versucht leserlich hinzubekommen.

Kann ich den hier nicht schön formatiert reinkopieren, so dass Ihr den vernünftig lesen könnt?

SELECT Materialkarte01.AFnr, Materialkarte01.Eing__Datum, Materialkarte01.Ident_Nr_ AS Kunde, Materialkarte01.idnr AS Artikel, Materialkarte01.Art__Name AS Artikelname, Materialkarte01.Menge_we, Lieferschein.Nr, Lieferschein.Ls_nr, Lieferschein.Ident_Nr_, Lieferschein.idnr, Lieferschein.Art__Name, Lieferschein.Menge, Lieferschein.Datum_Eing
FROM Lieferschein INNER JOIN Materialkarte01 ON Lieferschein.idnr = Materialkarte01.idnr
WHERE Materialkarte01.idnr = '014140'
AND Materialkarte01.Eing__Datum BETWEEN '2009-02-01' AND '2009-03-30
ORDER BY Materialkarte01.Eing__Datum, Lieferschein.Datum_Eing

Wie gesagt ich möchte jeden gefundenen Datensatz aus den beiden Tabellen in einzelnen Zeilen darstellen.

Gruß
didi01
 

MyBad

localhorst

AW: SQL Server Abfrage über 2 Tabellen

Ok, ich versuch das mal. Bin mir immer noch nicht ganz sicher, ob ich es nun verstanden habe.

Also deine Abfrage mit dem INNER JOIN liefert dir also die richtigen daten zurück:
Für die Ausgabe nutzt du doch sicherlich eine While-Schleife die dir die Daten in ein Array knallt (z. B.: while($row = mysql_fetch_array($sql)){}). Dann kannst du auf die einzelnen Daten zugreifen und formatiert in 2 Zeilen ausgeben.

Gruß
Tim
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

Hmmm, gar nicht so einfach das verständlich zu formulieren.

also, die SQL Abfrage die ich gepostet habe ist der Versuch das ganze Script zu bescheunigen und ist nicht in das PHP Script eingebunden, weil ich Ausgabe im Query Analyser nicht so hinbekomme wie ich es haben will.
Sie liefert mir die Ergebnisse die ich benötige, wenn ich das ganze im Query Analyser ablaufen lasse.
Aber die Ausgabe ist wie gesagt WE und der dazugehöhrige LS in einer Zeile. Wenn zusätzlich Teilmengen geliefert wurden (mehrere LS zu einem WE) habe ich den dazugehöhrigen WE natürlich nochmal in der Zeille des nächsten LS.

In der Version die mir die Daten wie gewünscht anzeigt, verwende ich 2 Abfragen, eine für die Wareneingänge und eine für die Lieferscheine. Diese beiden Abfragen laufen innerhalb einer FOR Schleife, die von Anfangs- bis zum Enddatum läuft. Das wollte ich optimieren, so dass die beiden Abfragen nicht mehr innerhalb der FOR Schleife sind und das ganze Script schneller abgearbeitet wird.

Gruß
didi01
 

MyBad

localhorst

AW: SQL Server Abfrage über 2 Tabellen

Hallo,

das habe ich ja auch so verstanden. Aber du kannst doch die Abfrage mit dem INNER JOIN auch für die Ausgabe per PHP nutzen.
 

Thyras

Nicht mehr ganz neu hier

AW: SQL Server Abfrage über 2 Tabellen

Also dass du jeweils sauber über mehrere Zeilen aufgesplittete (aber dennoch zusammengehörige) Ergebnisse mit einer Abfrage bekommst, ohne dass sich bestimmte Feldwerte wiederholen, kannst du vergessen. Da kannst du soviel an der SQL schrauben wie du willst. ;)

Zunächst wäre zu klären, was denn den ganzen Vorgang besonders verlangsamt: die SQL-Abfragen ansich, die anschließende Aufbereitung oder die Anzeige der Daten. Danach kann man gezielt versuchen zu optimieren.
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

Hi,

Du hast Recht. Das stimmt, nur ich habe da im Moment keinen Plan wie ich das mit PHP so aufbereitet bekomme. Deshalb dachte ich den SQL-Befehl so zu schreiben, dass ich das Ergebnis einfach über eine WHILE Schleife anzeigen kann, dass scheint aber nicht gehen.

Wie würdest Du denn da vorgehen?

Gruß
didi01
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

@Thyras

Zunächst wäre zu klären, was denn den ganzen Vorgang besonders verlangsamt: die SQL-Abfragen ansich, die anschließende Aufbereitung oder die Anzeige der Daten. Danach kann man gezielt versuchen zu optimieren.

Hi, ich denke mal der Grund ist, dass ich innerhalb einer FOR Schleife die beiden Abfragen habe und die Ergebnisse jeweils mit einer WHILE Schleife dann anzeigen lasse.

Gruß
didi01
 
Zuletzt bearbeitet:

MyBad

localhorst

AW: SQL Server Abfrage über 2 Tabellen

Also ich würde es wie folgt machen:
Code:
*Deine SQL-Abfrage*
while($row = mysql_fetch_array($ergebnis_der_sql_abfrage)){
  // Datensätze WA
  $deine_variable1 = $row["dein_feld1"];
  $deine_variable2 = $row["dein_feld2"];
 
  // Datensätze LS
  $deine_variable3 = $row["dein_feld3"];
  $deine_variable4 = $row["dein_feld4"];
  
  // Ausgabe WA
  echo $deine_variable1 . " " . $deine_variable2 . "<br />;
   
  // Ausgabe LS
  echo $deine_variable3 . " " . $deine_variable4;
    
}

So kannst du alle Daten pro Datensatz einzeln ausgeben und formatieren ind dem du Beispielsweise eine Liste drumherum bastelst.

Hoffe das hilft dir etwas weiter
 

Thyras

Nicht mehr ganz neu hier

AW: SQL Server Abfrage über 2 Tabellen

Das mit den Schleifen hat pauschal noch gar nix zu sagen. Ich würde erstmal feststellen, ob es ewig dauert die Daten zu ermitteln oder ob das Problem dann doch danach entsteht. Weil bisher klang es ja so, dass schon beim Abfragen aus der Datenbank mitunter ein Timeout kommt.

Paar Ansatzpunkte zum Prüfen:

- Laufen Skripte und Datenbank auf dem selben Server?
- Läuft das lokal oder im Web?
- Was sagt denn der Query Analyzer zu den Queries?
> Wie lange laufen die Abfragen?
> Kann man mit Keys und Indexen noch optimieren?
- Ist die Datenbank-/Tabellenstruktur generell überarbeitungsbedürftig?
- Von wie vielen Datensätzen reden wir denn hier ungefähr?
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

@MyBad
Vielen Dank,
das hilf mir weiter, ich habe jetzt eine Vorstellung wie ich es machen kann.

Gruß
didi01
 

didi01

Aktives Mitglied

AW: SQL Server Abfrage über 2 Tabellen

- Laufen Skripte und Datenbank auf dem selben Server?
- Läuft das lokal oder im Web?
- Was sagt denn der Query Analyzer zu den Queries?
> Wie lange laufen die Abfragen?
> Kann man mit Keys und Indexen noch optimieren?
- Ist die Datenbank-/Tabellenstruktur generell überarbeitungsbedürftig?
- Von wie vielen Datensätzen reden wir denn hier ungefähr?

- Die Scripte und die Datenbank laufen auf dem selben Server
- Es läuft im Intranet der Firma. Auf dem Server (altes Schätzchen aus dem Jahr 2001) laufen auch noch jede Menge anderer Programme. u.a. Exchange Server.
- Mit Keys und Indexes kann man mit Sicherheit noch Optimierungen vornhemen.
- Die Anzahl der Datensätze in den beiden Tabellen liegen jeweils bei ca. 150000. Die zu erwartenden Ergebnisse sind natürlich wesentlich geringer, hängt davon ab welches Datum (von - bis) der User angibt.

Ich werde mal die einzelnen Abfragen im Query Analyser checken.

Gruß
didi01
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.635
Beiträge
1.538.482
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben