• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] while zu while

bosko

Member
hoi,

ich weiß an eine Stelle von meinem Script nicht mehr weiter und komme auf keine Lösung oder habe was entsprechendes gefunden.
In meinem Script habe ich zwei Identische while Schleifen nur das der Ausgangspunkt unterschiedlich ist, wenn ein Wert in der Schleife A
vorhanden ist, soll dieser nicht nochmal in der Schleife B auftauchen. Hier ein Grund Auszug:

PHP:
			while ($result1 = $db->fetch_array($res1)) {
				$rest = $db->query("SELECT * FROM benutzer WHERE id='".$result1['user_id']."'");
				$row = $db->fetch_array($rest);
				echo $row['id'];
			}

			while ($result2 = $db->fetch_array($res2)) {
				$rest = $db->query("SELECT * from benutzer WHERE id='".$result2['id_user']."'");
				$row = $db->fetch_array($rest);
				echo $row['id'];						
			}

Ich habe schon viele Möglichkeiten durchprobiert aber keine Klappt wirklich das ich Werte von A nach B übertragen kann und diese
bei Identischen Variablen Ausklammere, $res1 sowie $res2 sind unterschiedliche Datenbanken.

Gruß

EDIT: Sorry gerade gesehen, ist im falschen Forum
 
Zuletzt bearbeitet:
Irgentwie kann ich aus deiner Erklährung nicht nachvollziehen, was du meinst. Willst du die "$rest" variable irgendwie an die zweite Schleife übergeben oder was ist dein Ziel?
 
mein Fehler, wenn ich den Code so schreibe ist es glaub verständlicher:

PHP:
            while ($result1 = $db->fetch_array($res1)) {
                $rest = $db->query("SELECT * FROM benutzer WHERE id='".$result1['user_id']."'");
                $row = $db->fetch_array($rest);
                $a++;
                $id1['a'] = $row['id']
                $name = $row['name']
                echo $name;
            }

            while ($result2 = $db->fetch_array($res2)) {
                $rest = $db->query("SELECT * from benutzer WHERE id='".$result2['id_user']."'");
                $row = $db->fetch_array($rest);
                $b++;
                $id2['b'] = $row['id']
                if($id1['a'] != $id2['b']) {
                    $name = $row['name']
                    echo $name;
                }
            }

ich weiß das das so nicht geht, aber das man sich das vorstellen kann was ich meine
 
Ich bin mir immer noch nicht sicher was genau du willst, aber wenn ich dich richtig verstanden habe sollte dir das hier helfen:

Code:
while ($result1 = $db->fetch_array($res1)) {
                $rest = $db->query("SELECT * FROM benutzer WHERE id='".$result1['user_id']."'");
                $row = $db->fetch_array($rest);
                $a++;
                $id1['a'] = $row['id']
                $name = $row['name']
                echo $name;
                while ($result2 = $db->fetch_array($res2)) {
                  $rest = $db->query("SELECT * from benutzer WHERE id='".$result2['id_user']."'");
                  $row = $db->fetch_array($rest);
                  $b++;
                  $id2['b'] = $row['id']
                  if($id1['a'] != $id2['b']) {
                      $name = $row['name']
                      echo $name;
                  }
                  
              } 
            }

ich bin mir nicht sicher ob das das ist, was du willst. Und ob das für dich sinnvoll ist.

(wenn dein problem das ist was ich denke was es ist, kannst du auch einfach alle ids in einem array speichern und dann mit "foreach" durchlaufen und abtesten)
 
Dein Code habe ich auch schon Getestet, was leider nicht geht wenn die erste Schleife ein zweites mal durch läuft werden die Werte vom ersten Durchlauf nicht mit Übernommen.

ABER, vielen Dank an deinem Tip mit der Array, habe die ID's in die Array gespeichert und Mittels array_diff verglichen, so werden Doppelte Wert 100% ausgeschlossen.

Gruß
 
@Transformator: Das funktioniert so nicht, da die zweite Query zu oft ausgeführt wird und dabei dann auch immer nur ein Element ausgespart wird.

@bosko: So wie deine Query aussieht, kannst du das Problem in SQL lösen:
PHP:
SELECT *
	FROM benutzer
	WHERE
		id='".$result1['user_id']."' OR
		id='".$result2['id_user']."'
Wenn deine wirkliche Abfrage doch anders aussieht, muss du die Ergebnisse der beiden Queries in ein Array schreiben und dann ein array_unique() drüberlaufen lassen. Erst anschließend kannst du dann das Ganze ausgeben.

PS: Wenn du wirklich nur die ID aus der DB brauchst, solltest du auch nur die abfragen...
 
Zurück
Oben