SQL Tabellen übergreifendes Statement Hilfe

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

SQL Tabellen übergreifendes Statement Hilfe

Beitrag von X360 Andy »

Hallo

Ich habe ein Problem, mein Beispiel Problem hat 2 Tabellen
Die Artikel ( mit vielen Artikel Infos ) und die Positionen Tabelle

TABELLE Artikel
ID|Artikelnummer|EANNummer
1|s1|1234...123
2|s2|1234...124
3|s3|1234...125
4|s4|1234...126

TABELLE Positionen
ID|ORDER|Artikellnummer|E_Preis....
1|1|s1|..
2|1|s2|..
3|2|s3|..
4|3|s4|..


Um nun alle Produkte einer Bestellung zu bekommen wird folgendes SQL! Statement ausgeführt

Code: Alles auswählen

SELECT Artikelnummer,E_Preis From Positionen WHERE ORDER = :Belegnummer
:Belegnummer = Parameter ( z. B. "1" )
Bei der Abfrage mit 1 als Parameter wäre die Ausgabe
s1|..
s2|..
Nun soll die Ausgabe aber sein
s1|..|1234...123
s2|..|1234...124

Ich möchte also die EANNummer auch in der Ausgabe haben

Nun muss also eine Verbindung innerhalb EINES Statement in die Artikel Tabelle aufgebaut werden.
Da das ganze SQL und kein MYSQL ist wo ich mit PHP was zwischenspeichern kann ist das ein großes Problem für mich...
Kann mir jemand helfen ?
Habs mal kurz in PHP und MYSQL gecodet... ich brauche das nur in SQL als einzeiler :)

Code: Alles auswählen

<?php
$order = "1";
$abfrage = "SELECT Artikelnummer,E_Preis From Positionen WHERE ORDER = '$order'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   $artnr = "$row->Artikellnummer";
   $E_Preis = $row->E_Preis";
 
           $abfrage = "SELECT EANNummer FROM Artikel WHERE Artikelnummer = '$artnr' LIMIT 1";
        $ergebnis = mysql_query($abfrage);
        while($row = mysql_fetch_object($ergebnis))
           {
           $EANNummer = "$row->EANNummer";
           }
    echo "$artnr|$E_Preis|$EANNummer";
   }
?>
 
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: SQL Tabellen übergreifendes Statement Hilfe

Beitrag von X360 Andy »

Lösung /:->

Code: Alles auswählen

 
      SELECT p.Artikelnummer,p.E_Preis,a.EANummer FROM Positionen p, Artikel a WHERE p.Artikelnummer = a.Artikelnummer AND ORDER = '$order'
SirMatti74
Beiträge: 37
Registriert: 08.11.2009 09:12

Re: SQL Tabellen übergreifendes Statement Hilfe

Beitrag von SirMatti74 »

Mithin hat in Deinem Beispiel die Artikelnummer nichts in der Tabelle "Positionen" sondern einzig in der Tabelle "Artikel" zu suchen. Was in die Tabelle "Position" gehört, ist die Spalte ArtikelID (wie Du sie letzten Endes nennst, ist Dir überlassen).

ARTIKEL
ID|ARTIKELNUMMER|EANNNUMMER|...

POSITIONEN
ID|ORDER|ARTIKELID|E_PREIS|...

Wenn Du nun zu der jeweiligen Position Artikeldaten benötigst (wie zum Beispiel die Artikelnummer), verknüpftst Du die beiden Tabellen über das Schlüsselfeld (ID,ARTIKELID) und holst Dir die Daten aus der jeweiligen Tabelle:
SELECT A.ARTIKELNUMMER, P.E_PREIS, A.EANNUMMER FROM POSITIONEN P, ARTIKEL A WHERE P.ARTIKELID = A.ID
Da ich vermute, dass Du noch eine Tabelle mit Bestellungen hast, in dem beispielsweise die Bestellnummer, Adressdaten, das Bestell- oder Lieferdatum, der Status der Bestellung usw. enthalten sind, würde die Spalte ORDER das selbe Schicksal teilen: ORDER fliegt in der Tabelle Positionen raus ORDERID kommt rein und die Verbindung erfolgt wieder übers Schlüsselfeld (ID,ORDERID), wenn Du Daten aus der Tabelle mit den Bestellungen benötigst.

Informiere Dich mal über "Normalisierung" bei Datenbanken.
Antworten