2 große Strings sortieren und zusammenfügen

  • Themenstarter Themenstarter starfoxfs
  • Beginndatum Beginndatum
S

starfoxfs

Hi zusammen,

Die Frage ist ist das überhaupt möglich was ich vorhabe und zwar habe ich 2 Strings

PHP:
$content1.= "<tr><td align='right'>" .$list["NPLPARTREF"]. "</td>";
$content1.= "<td align='right'>" .$list["HPARTPLBLK"]. "</td>";
$content1.= "<td align='left'>" .$list["XPARTEXT"]. "</td>";
$content1.= "<td align='right'>" .$list["XORDERGUN"]. "</td>";
$content1.= "<td align='right'>" .money_format('%n', $list["Preis"]). "</td>";

$content2.= "<tr><td align='right'>" .$parts["NPLPARTREF"]. "</td>";
$content2.= "<td align='right'>" .$parts["HPARTPLBLK"]. "</td>";
$content2.= "<td align='left'>" .$parts["XPARTEXT"]. "</td>";
$content2.= "<td align='right'>" .$parts["XORDERGUN"]. "</td>";
$content2.= "<td align='right'>" .money_format('%n', $parts["Preis"]). "</td>";

$content 1 z.b. sieht so aus :

1 B173416 ZYLINDERKOPF KOMPL. 1 189,83 EUR
9 B173425 PLUNGER, NOCKENEINSTELLUNG 1 0,00 EUR
10 B173427 FEDER, PLUNGER 1 0,00 EUR
11 B173429 DICHTUNG, VERGASERISOLATOR 1 6,37 EUR

$content 2 selbes nur mit anderen nummern und teilen.

Ich möchte $content1 und $content2 zusammenfügen aber auch sortieren und zwar Numerisch wie man oben sieht soll dann am Ende eine Liste Numerischer Reihenfolge rauskommen so etwa:

1 B173416 ZYLINDERKOPF KOMPL. 1 189,83 EUR
2 B173418 KLEMME, VENTILFUEHRUNG 2,10 EUR
3 B173419 ANSCHLAGPLATTE 2,28 EUR
.
.
.


Zusammenfügen ist ja ein leichtes:

PHP:
$content = $content1.$content2

aber wie sortier ich das ganze ?

Ps: $content1 ist eine While Schleife $content2 eine andere While Schleife die Abfrage kann ich nicht zusammenfügen das funktioniert nicht.
 
Nun bei Union hab ich allerdings ein Problem wie mir gerade aufgefallen ist und zwar bekomm ich die Fehlermeldung:

The used SELECT statements have a different number of columns

PHP:
$sql = "(SELECT * FROM ".$sqltab3."
LEFT JOIN ".$sqltab4." ON (".$sqltab3.".HPARTPLBLK = ".$sqltab4.".HPARTPLBLK)
WHERE ".$sqltab3.".HMODTYP='$hmodtyp' 
AND ".$sqltab4.".NPL = '$picord' 
AND ".$sqltab4.".NPLBLK = '$pic') UNION (SELECT * FROM ".$sqltab4." WHERE NPL = '$picord' AND NPLBLK = '$pic' AND NPLPARTREF != '$pos1')";
$result = $db->query($sql);
while ($list = $db->fetcharray($result)) 
.
.
.

Ich erklärs mal erste Abfrage liest alle Teile aus die zu dem Modell passen.

1te Abfrage:

PHP:
SELECT * FROM ".$sqltab4." WHERE NPL = '$picord' AND NPLBLK = '$pic' AND NPLPARTREF != '$pos1'

Die 2te Abfrage liest die Teile aus die explizit dieses Modell sind und soll dann eigentlich die Teile aus der 1ten Abfrage entfernen die diesselbe Positionsnummer haben.

2te Abfrage:

PHP:
SELECT * FROM ".$sqltab3."
LEFT JOIN ".$sqltab4." ON (".$sqltab3.".HPARTPLBLK = ".$sqltab4.".HPARTPLBLK)
WHERE ".$sqltab3.".HMODTYP='$hmodtyp' 
AND ".$sqltab4.".NPL = '$picord' 
AND ".$sqltab4.".NPLBLK = '$pic'
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Warum listest du die Spalten nicht explizit auf, die du dann nachher auch brauchst so das die beiden Tabellen kompatibel für UNION sind?

Ansonsten, könntest du die Ergebnisse auch zusammenverarbeiten, wenn du beide Ergebnisse sortierst (ORDER BY).

Dann kannst du sie bei der Ausgabe wieder zusammenmischen (merge):
PHP:
while ($list && $parts) {
    if ($list[$sort_by] < $parts[$sort_by]) {
      // gib $list aus:
      ...
      $list = fetcharray(...);
    } else {
      // gib $parts aus:
      ...
      $parts = fetcharray(...);
    }
}

// entweder $list oder $parts ist nun leer => Rest ausgeben
while ($list) {
  // gib $list aus
  ...
  $list = fetcharray(..);
}
while ($parts) {
  ... // du weißt schon
}
Gruß

PS: Du weißt was SQL Injection ist?!
 
Zuletzt bearbeitet:
Zurück