Sandra: while-Schleife mit 2 Bedingungen

Hi Forum,
die folgende while-Schleife soll so lange laufen, solange $history ODER $history_o Inhalt haben.

Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.

while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
{

weiss jemand warum?

viele Grüße
Sandra

  1. Hi,

    while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
    {

    ja ich, das || durch && ersetzten, bei schleifen muss man etwas anders denken wie bei ner if-Abfrage, schließlich ist bei || immer true wenn eines schon true ist. verstehst?

    MfG

    1. Hi,
      aber das && kann ich nicht setzen, da es auch sein kann, dass z.B nur $history_o Daten enthält und dann trotzde, die Schleife ausgeführt werden soll.

      == ist auch falsch, da es ja kein Vergleich ist, sondern eine Zuweisung.

      Hat evtl. noch jemand einen Tip?

      vielen Dank
      Sandra

      1. Hi,
        na dann mach für jedes seperat ne schleife.

        Mfg

        1. Hi,
          ja das wäre schön wenn das  mit den 2 Schleifen so einfach gehen würde.

          genauere Erklärung:
          ich habe einen Shop, mit einer DB-Tabelle für Innlandbestellungen und eine Tabelle für Auslandsbestellungen.

          In der Bestellübersicht sollen alle Bestellungen, die  aus beiden Tabellen gelesen werden, untereinander aufgelistet werden.

          am besten sortiert nach Datum

          das Script an dem ich arbeite hat bisher nur aus einer Tabelle gelesen. darin werden zuerst alle Bestellungen anhand der Kunden_id gezählt (count*). solange Bestellungen vorhanden sind, wird diese Tabelle dann nochmal ausgelesen.

          Das Script ist leider so umfangreich sonst würde ich es hier posten.

          hat jemand einen Link zu einem funktionierenden Beispiel, das Werte aus 2 Tabellen liest und die dann sortiert nach Bestelldatum untereinander auflistet?

          ansonsten weiss ich nicht, wie ich hier die 2.Tabelle integrieren muss:

          hier Beispiel-code für die ausgabe aus einer Tabelle, in welche noch  die Werte aus der 2.Tabelle mit rein müssen:

          if ($orders_total > 0)
          {
          $history_query_raw = "select o.orders_id, o.date_purchased, o.delivery_name, o.billing_name, ot.text as order_total, s.orders_status_name from " . TABLE_ORDERS . " o, " . TABLE_ORDERS_TOTAL . " ot, " . TABLE_ORDERS_STATUS . " s where o.customers_id = '" . (int)$customer_id . "' and o.orders_id = ot.orders_id and ot.class = 'ot_total' and o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' order by orders_id DESC";
              $history_split = new splitPageResults($history_query_raw, MAX_DISPLAY_ORDER_HISTORY);
              $history_query = tep_db_query($history_split->sql_query);

          while ($history = tep_db_fetch_array($history_query))
          {
                $products_query = tep_db_query("select count(*) as count from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$history['orders_id'] . "'");
                $products = tep_db_fetch_array($products_query);

          if (tep_not_null($history['delivery_name']))
             {
                  $order_type = TEXT_ORDER_SHIPPED_TO;
                  $order_name = $history['delivery_name'];
                } else
             {
                  $order_type = TEXT_ORDER_BILLED_TO;
                  $order_name = $history['billing_name'];
                }
          ....
          dann folgt die Ausgabe in html:::::

          ...<td class="main" width="50%" valign="top"><?php echo '<b>' . TEXT_ORDER_DATE . '</b> ' . tep_date_long($history['date_purchased']) . '<br><b>' . $order_type . '</b> ' . tep_output_string_protected($order_name); ?></td>...

          Wenn ich in diese DB-Befehle die 2.Tabelle mit einfüge, mischt er mir die Bestellung wild durcheinander. weiss jemand Rat?

          viele Grüße
          Sandra

      2. yo,

        Hat evtl. noch jemand einen Tip?

        ich würde mit der funktion empty() innerhalb der schleifenprüfung arbeiten und die zuweisung in der while schleife machen.

        Ilja

  2. Hallo bin zwar nicht der super Programmierer
    aber

    while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )

    ist nur eine Zuweisung
    meiner meinung nach müsste es richtig heißen:

    while ($history == tep_db_fetch_array($history_query) || $history_o == tep_db_fetch_array($history_o_query) )

    Gruß
    Sebastian

  3. Hallo Sandra,

    Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.

    Was heißt denn "funktioniert ... nicht"?
    Wird sie gar nicht durchlaufen? Oder immer?

    while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )

    Mach doch mal die Zuweisungen vorher und laß Dir die Ergebnisse ausgeben. Vielleicht stimmt da schon was nicht.

    Gruß,
    Maddin

  4. Hallo,

    Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.
    while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
    {
    weiss jemand warum?

    Eine OR (||) Verknüpfung wird optimiert (short-circuit) ausgeführt. Da sie TRUE ergibt, sobald der erste Wert TRUE ergibt, wird dann, wenn das so ist, der zweite Wert erst gar nicht mehr erstellt. Nur wenn der erste Wert FALSE ergibt, _muss_ der zweite Wert erstellt werden.
    ...
    $history = tep_db_fetch_array($history_query);
    $history_o = tep_db_fetch_array($history_o_query;
    while ($history || $history_o)
      {
       //machwas
       $history = tep_db_fetch_array($history_query);
       $history_o = tep_db_fetch_array($history_o_query;
      }
    ...

    viele Grüße

    Axel