Flashhilfe.de - Flash Community

Bester Weg um eine 1:N Relation aus MySQL via PHP in XML zu bekommen

 


AntwortenRegistrieren Seite1  

woiferl#1
Benutzerbild von woiferl
Beiträge: 21
Wohnort: Vilsheim
Registriert: Jan 2010

25.01.2010, 23:02

Hi,
kann mir jemand sagen, wie ich am Besten eine 1:n Relation (typisches Beispiel: Bestellung / Bestellpositionen) via PHP in XML ausgeben kann? Mein erster Ansatz war über eine mysql_query den Join vorzunehmen und dann über mysql_fetch_object die Ergebnismenge auszuwerten. Ich habe aber da mit dem Gruppenwechsel Probleme. Kennt jemand da einen eleganten Weg oder vielleicht ein Tutorial dazu?
Das Ergebnis sollte vereinfacht in etwa so aussehen:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
<Bestellung>
<Nr>1</Nr>
<Datum>2010-01-25</Datum>
  <Bestellposition>
      <PosNr>1</PosNr>
      <Artikel>ABC</Artikel>
  </Bestellposition>
  <Bestellposition>
      <PosNr>2</PosNr>
      <Artikel>XYZ</Artikel>
  </Bestellposition>
</Bestellung>

Vielen Dank
springer#2
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

26.01.2010, 07:33

hi,
pack die positionen noch in eine node:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
<Bestellung>
<
Nr>1</Nr>
<
Datum>2010-01-25</Datum>
<
Bestellpositionen>
  <
Bestellposition>
      <
PosNr>1</PosNr>
      <
Artikel>ABC</Artikel>
  </
Bestellposition>
  <
Bestellposition>
      <
PosNr>2</PosNr>
      <
Artikel>XYZ</Artikel>
  </
Bestellposition>
</
Bestellpositionen>
</
Bestellung>
?>
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
woiferl#3
Benutzerbild von woiferl
Beiträge: 21
Wohnort: Vilsheim
Registriert: Jan 2010

Themenautor/in

26.01.2010, 07:48

Ja, das werde ich machen. Mein Problem ist allerdings nicht unbedingt die XML-Struktur, sondern eher die Lösung über PHP. Ist für so eine Aufgabe mysql_fetch und mysql_fetch_object da der richtige Weg, oder sollte ich das anderweitig lösen. Oder anders gefragt, wie kriegt man auf elegante Weise relationale Daten in ein (semi-)strukturelles XML-Format mit PHP?
springer#4
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

26.01.2010, 07:53

du kannst ja zb. bei den bestellpositionen in der db die bestellid eintragen. oder du machst eine relationstabelle, bestellung_bestellposition mit der id der bestellung und der id der bestellposition. zweiteres würde aber nur bei einer N:N beziehung sinn machen.... und mysql_fetch_object ist schon das richtige. ich ziehe es vor mit ValueObjects zu arbeiten, also mit Datentypen. dann wird aus einer row von der db, dann ein typisiertes object.... ist aber geschmacksache und auch eine aufwandfrage....
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
woiferl#5
Benutzerbild von woiferl
Beiträge: 21
Wohnort: Vilsheim
Registriert: Jan 2010

Themenautor/in

26.01.2010, 08:19

Hi,
das Datenmodell sieht so aus wie du es beschreibst. Bei den Bestellpositionen habe ich die Bestell-ID mit drin. Dann mache ich mit mysql_fetch den Left-Join der Tabellen über die Bestell-ID. Nun fängt mein Problemchen an - ich habe dann in jedem Record der Ergebnismenge, bspw. das Datum der Bestellung. In meiner XML-Ausgabestruktur sollte das ja aber nur am obersten Knoten sein. Mit dem folgenden Skript krieg ich dann je Bestellposition einen Record:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$Query =  "SELECT * FROM bestellung LEFT JOIN bestellpositionen WHERE bestellung.id = bestellpositionen.id";

$Result = mysql_query( $Query );

$Output = "<?xml version=\"1.0\" encoding=\" utf-8\"?>";
$Output .= "<Daten>";

while ( $record = mysql_fetch_object( $Result ) ){
   $Output .= "<Bestellung>";
   $Output .= "<BestellNr>".$record->bestellnr."</BestellNr>";
   $Output .= "<BestellDatum>".$record->datum."</BestellDatum>";
             ???
   $Output .= "</Bestellung>";
}
$Output .= "</Daten>";
mysql_free_result( $Result );
print ( $Output );


Bei den 3 Fragezeichen, müssten dann ja die Bestellpositionen rein, oder? Ich glaub ich steh total auf der Leitung!
springer#6
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

26.01.2010, 08:43

die bestellposition braucht auch eine eindeutige id:

tabelle bestellung:

bestellung_id  | weitere felder....

tabelle bestellpositionen:

bestellposition_id  |  bestellung_id  |    weitere felder....

der ablauf sieht dann so aus:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$Query 
"SELECT * FROM bestellung";

while(......){
     
$Query2 "SELECT * FROM bestellpositionen WHERE bestellung_id=".$record['bestellung_id'];
      while(.....){
           
// ausgabe von den einzelnen bestellpositionen...
     
}
      ......
}
?>
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
woiferl#7
Benutzerbild von woiferl
Beiträge: 21
Wohnort: Vilsheim
Registriert: Jan 2010

Themenautor/in

26.01.2010, 08:48

Super, die zweite while-Schleife war es. Ich danke dir vielmals - du hast mir den Tag gerettet.

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Javascript new line [Flash CS5] 23.11.2020 - user01234
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de