zorni
Goto Top

SQL Datenbank nur bestimmte Datensätze ausgeben

Hi,

habe ein Problem mit einer SQL Abfrage und weiss nicht wie ich es lösen soll...

In einer Tabelle habe ich 2 Spalten, einmal Sendungsnummer und einmal Paketnummer.

Jetzt habe ich das Problem, dass mehrere Paketnummern nur eine Sendungsnummer haben und ich nicht weiss, wie ich es am geschicktesten ausgeben soll.

Ich möchte gerne eine Tabelle mit der ersten Sendungsnummer und darunter die folgenden Paketnummern haben.
Dann eine weitere Tabelle mit der nächsten Sendungsnummer und wieder entsprechend die Paketnummern.

Bekomme es immer nur hin, dass ich entweder alles ausgeben kann. Oder nur alle Sendungsnummern zu einer Paketnummer, aber ohne die entsprechende Paketnummer aufzulisten....

Hoffe ihr versteht was ich meine....

Ich realisiere es mit PHP und MSSQL

Content-ID: 166172

Url: https://administrator.de/contentid/166172

Ausgedruckt am: 13.11.2024 um 07:11 Uhr

Arano
Arano 12.05.2011 um 17:48:10 Uhr
Goto Top
Hi Zorni,

das musst du in zwei Teile "spalten" !

  1. Daten auslesen
  2. Daten ausgeben

Beim auslesen muss du die Datensätze nur entsprechend sortieren lassen:
  SELECT `send_nr`, `paket_nr`
    FROM `tabelle`
ORDER BY `send_nr` ASC
Das sollte die Datensätze etwa so ausgeben:
send_nr paket_nr
100101 900901
100101 900902
100101 900903
100105 900911
100112 900957
100112 900958

Und diese Datensätze lässt du nun in einer einfachen Schleife ausgeben !
Der "Trick" dabei ist sich die "send_nr" zu merken. Wenn sich diese ändert bedeutete das, dass eine neue Tabelle beginnen soll, bleibt sie gleich bleibe wir in der Tabelle und erzeigen einfach weitere Zeilen zür jedes zusätzliche Paket.

Alles klar soweit ?


Viel Erfolg face-smile
~Arano
zorni
zorni 12.05.2011 um 18:00:14 Uhr
Goto Top
Das heisst, ich benötige nur diese ein sql abfrage und mach den rest mit php if schleifen? will eben später noch einen status pro sendungsnummer und artikelnummer setzen und auslesen. aber soweit bin ich noch nicht ;) sorrz, für die dummen fragen, bin noch recht unerfahren
Arano
Arano 12.05.2011 um 18:55:53 Uhr
Goto Top
Hi

Das heisst, ich benötige nur diese ein sql abfrage und mach den rest mit php if schleifen?
Jein... Ja !

"if" ist keine Schleife, das ist eine Anweisung die bedingt ausgeführt wird. (eben WENN die Bedingung der Wahrheit entspricht)
Ich meinte eine Schleife wie "while", "for" oder "foreach" die wiederholt werden, SOLANGE deren Bedingungen der Wahrheit entsprechen.

Warum fragst du eigentlich, probiere es doch gleich aus - hau in die Tasten face-wink

Das mit dem Status sollte kein Problem darstellen, sofern du nichts kompiziertes mit ihm vorhast !?
Aber ist ja auch egal, fang erstmal an

sorrz, für die dummen fragen, bin noch recht unerfahren
"...bin noch recht unerfahren"
Das waren ALLE einmal
"sorrz, für die dummen fragen, ..."
Der Die Das, Wer Wie Was, Wieso Weshalb Warum, wer nicht fragt bleibt dumm !

Und ganz nebenbei, keine der Fargen ist dumm !


~Arano
zorni
zorni 13.05.2011 um 10:22:04 Uhr
Goto Top
Also ich habe nun folgendes gemacht:

$awb = ("SELECT DISTINCT AWB, MRN FROM anl_po00 WHERE AnlieferungsNr = '$Anlieferungs_Nummer' ORDER BY AWB ASC");

echo '<table border="1">';
while ($row = mssql_fetch_array($awberg))
{
echo '<tr><td>'.$row['AWB']."</td> \n";
echo '<tr><td>'.$row['MRN']."</td> \n";
echo '<td>'.$row['MRN']."</td> \n";
echo '<td>'.$row['Status']."</td></tr>\n";
}
echo '</table>';

Nun bekomm ich es in etwa so ausgegeben:

02020071974 <- Lieferungssnummer
11DE586600274612E4 <- Artikelnummer
02020071974 <- Lierfungssnummer
11DE586600274613E3 <- Artikelnummer
02020071974
11DE586600274614E2
02020071974
11DE586600274616E0
02020071975
11DE586600274611E5
02020071975
11DE586600274617E0
02020071975
11DE586600274618E9
02020071975
11DE586600274619E8
02020071975
11DE586600274620E0

Ich weiss nicht, wie ich es hinbekomme, dass er mit die Liefergungsnummer jetzt nur einmal ausgibt und die dazugehörigen Artikelnummern darunter ausgibt.
AWB steht für Lieferungsnummer und MRN für Artikelnummer.
Oben in der select abfrage, das AnlieferungsNr = '$Anlieferungs_Nummer', ist vorher meine Prüfung ob es die richtie Sendungssnummer ist.
Weil Eine Sendungssnummer kann mehrere Lieferungsnummern enthalten, dass hab ich soweit auch hinbekommen.
zorni
zorni 13.05.2011 um 10:34:09 Uhr
Goto Top
glaub ich habs schon ^^ und zwar hab ich das nun so gelöst erstmal:

$daten = array();
while($row = mssql_fetch_object($awberg) ) {
$daten[$row->AWB] = Array(
'MRN' => $row->MRN,
);
}

foreach ( $daten as $key => $value ) {
echo '<div class="AWB">'.$key.'</div>';
foreach ( $value as $member ) {
echo '<table>';
echo '<tr><td>MRN:</td><td>'.$member['MRN'].'</td></tr>';

echo '</table>';
zorni
zorni 13.05.2011 um 11:33:56 Uhr
Goto Top
hab doch noch ein problem...

und zwar wollte ich jetzt die statusbeschreibung mit ausgeben und habe mein SELECT angepasst.


$awb = ("SELECT DISTINCT anl_po00.AWB as AWB, anl_po00.MRN as MRN, anl_po00.Status, status00.Beschreibung FROM anl_po00, status00 WHERE anl_po00.AnlieferungsNr = '$Anlieferungs_Nummer' ORDER BY anl_po00.AWB ASC");

Wenn ich nun aber meine ausgabe laufen lasse mit:

$daten = array();
while($row = mssql_fetch_object($awberg) ) {
$daten[$row->AWB] = Array(
'MRN' => $row->MRN,
);
}

foreach ( $daten as $key => $value ) {
echo '<table width="400" border="1">';
echo '<tr><td>AWB:</td><td><div class="AWB">'.$key.'</div>';
echo '</table>';
foreach ( $value as $member ) {
echo '<table width="400" border="1">';
echo '<tr><td>MRN:</td><td>'.$member['MRN'].'</td></tr>';
echo '</table>';
}
}


Dann bekomm ich jede Artikelnummer 5 mal ausgegeben und ich finde den fehler nicht....
Arano
Arano 13.05.2011 um 16:19:58 Uhr
Goto Top
Das ist doch alles Grütz !

  1. Wenn du einen neuen Beitrag erstellst, dann klick mal auf den __roten__ Link: Formatierungshilfe über dem Eingabefeld
  2. Du erstellst ja lauter einzelne Tabellen, das mach doch überhaubt keinen Sinn !
  3. In deinem Startposting spricht du von "Sendungsnummer" und "Paketnummer" aber in deinem jetzigem Code scheint es die gar nicht mehr zu geben, stat dessen gibt es die "AbWasserBerlin" und die "MüllRetoureNord" !? Ja was weiss ich den schon über Recycling !?
  4. Wieso fragst du eigentlich wie mann etwas machen kann, wenn du es dann doch ignorierst ? (Darauf hät ich gerne eine Antwort)

Also noch einmal:
Daten beim auslesen sortieren (Senungsnummer ASC, Paketnummer ASC).
Beim abarbeiten der Ergebinstabelle die aktuelle Sendungsnummer merken und vergleichen.

Verstanden ?

<?php
  // lese Daten aus DB
  $strSelectAllePakete = "SELECT Sendungsnummer,Paketnummer FROM tabelle ORDER BY Sendungsnummer ASC";  
  $resAllePakete = mysql_query();
  // erinerungs Variable
  $strAktuelleSendNr = NULL;

  // beginne Tabelle
  echo '<table>';  
  // verarbeite DB-Daten
  while($arrPaket = mysql_fetch_array($resAllePakete))
  {
    // erinnern wir uns an diese Sendungnummer ?
    if($strAktuelleSendNr != $arrPaket['Sendungsnummer']) // DESSWEGEN ist es wichtig die Daten nach der Sendungsnummer zu sortieren  
    {
      // wenn nicht, dann merken wir uns sie jetzt und
      $strAktuelleSendNr = $arrPaket['Sendungsnumer'];  
      // gebenen einen Tabellenheader mit Sendungsnummer und die Paketnummer aus
      echo '<tr><th>'.$arrPaket['Sendungsnummer'].'</th></tr>';  
      echo '<tr><td>'.$arrPaket['Paketnummer'].'</td></tr>';  
    }
    else
    {
      // ja wir erinnern uns, also wurde die Sendungsnummer schon ausgegeben und
      // wir brauchen nur noch eine weitere Paketnummer ausgeben
      echo '<tr><td>'.$arrPaket['Paketnummer'].'</td></tr>'  
    }
  }// end while

  // beende Tabelle
  echo '</table>';  
?>
Im prinzip ist es das gleiche was in unserem Kopf automatisch abläuft wenn wir solch eine Tabelle sehen.
100101
900905
900906
900909
100154
900483
900484
100155
900532
900533
900534
Ohne das dort irgendwo steht, das die Pakete zwischen zwei Sendungsnummern zu der obern Sendungsnummer gehören, erkennen wir sowas automatisch (mehr oder weniger) weil wir uns erinnern.


Ich hatte sogar gefragt ob alles klar ist...

Es ist nur dumm, nicht zu fragen !


So, alles klar soweit ?


~Arano
zorni
zorni 16.05.2011 um 11:10:14 Uhr
Goto Top
Hi,

sorry hatte es mittlerweile selbst gelöst und meine fehler gefunden gehabt.

Habe es nun wie folgt gemacht:

 
<? 

		$daten = array();

	while($row = mssql_fetch_object($awberg) ) {
   		$daten[$row->AWB] = Array(
   		'MRN' => $row->MRN,  
        'Status' => $row->Status,  
 		  );

}

		foreach ( $daten as $key => $value ) {
			
		$mrnstatrech = mssql_query("SELECT Status FROM anl_po00 WHERE AnlieferungsNr = '$Anlieferungs_Nummer'");  
		$mrnstat = mssql_fetch_row($mrnstatrech);
		
		
		echo '<p>&nbsp;</p>';  
		echo '<table width="800" border="0" align="center">';  
		echo '<tr><td>AWB:</td><td><div class="AWB">'.$key.'</div>';  
		echo '</table>';  
		echo '<p>&nbsp;</p>';  
 		foreach ( $value as $member ) {
        echo '<table width="800" border="1" align="center">';  
        echo '<td>MRN:</td><td>'.$member['MRN'].'</td>';  
		if ($mrnstat == 20) {
		echo "<td>Status:</td><td><img src=\"image/orange.png\"></td>"; }  
		else {
		echo "fehler";}  
?> 

oder ist daran was nun falsch? sieht auf jedenfall ganz gut so aus...