while in while problem

DJmension

Mitglied
Ich habe ein script indem eine Datenbank Tabelle abgefragt wird, Inhallt 5 Einträge :

PHP:
$query  = "SELECT * FROM goldie_s20";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){

in dieser while schleife frage ich eine weitere Tabelle ab Inhallt mommentan 1 Eintrag :

PHP:
  $sQuery = "SELECT * FROM time_s20 WHERE eintragid = '".$row['IDnum']."' ";  
  $rAttackResult = mysql_query($sQuery); 
  while ($aAttacks = mysql_fetch_assoc($rAttackResult)) {

Die Tatsache das in der ersten 5 Einträge also Zeilen drin sind , und in der zweiten nur ein eintrag bzw. eine Zeile. Kommt es zu Komplikationen.
Was kann ich machen um die abfrage der zweiten DB Tabelle so zu gestallten das die Abfrage tatsächlich nur so offt gemacht wird nach der Anzahl der einträge .

Jetziger Code außschnitt der betroffenen Stelle

PHP:
$query  = "SELECT * FROM goldie_s20 ORDER BY Jahr DESC, Monat DESC, Tag DESC, Stunde DESC, Minute DESC LIMIT $offset, $rowsPerPage";
$result = mysql_query($query);
$anz = mysql_num_rows($result);
if($anz > 0){


while($row = mysql_fetch_assoc($result)){ 
if($i%2==0) { $trcolor = "#003333"; } else { $trcolor = "#005555"; }
// ************************************************  Countdown part two Start
echo '<tr bgcolor="'.$trcolor.'">';

  $sQuery = "SELECT * FROM time_s20 WHERE eintragid = '".$row['IDnum']."' ";  
  $rAttackResult = mysql_query($sQuery); 
  while ($aAttacks = mysql_fetch_assoc($rAttackResult)) { 
 
if ($aAttacks['userid'] == $iUserID && $aAttacks['time'] >= time() )  
  { 
    $iAttackable = 1; 
    $iAttackgif = "Block.gif";
    $countb = (($aAttacks['time'] - time())-3600) ;
    $count = date("H:i:s", $countb);
  } 
  else
  if ( $aAttacks['timea'] >= time() )  
    { 
      $iAttackable = 2;
      $iAttackgif = "Block_d.gif";
      $countb = (($aAttacks['timea'] - time())-3600) ;
      $count = date("H:i:s", $countb); 
    }
    else
    if ($aAttacks['userid'] != $iUserID )
    { 
      $iAttackable = 3;
      $iAttackgif = "OK.gif";
      $count = '';         
    } 

}

Das Problem zeigt sich so . Der erste Eintrag wird koreckt gemacht und auch koreckt an die Variablen in der if übergeben . Da aber nur 1 Eintrag in der zweiten DB Tabelle ist , bekommen die Variablen in der if bei den weiteren 4 Einträgen der ersten DB Tabelle die werte des ersten Eintrags.

Ich möchte gerne das bei leerläufen folgendes in den IF Variablen steht.
PHP:
      $iAttackable = 3;
      $iAttackgif = "OK.gif";
      $count = '';

Also in etwa so etwas wie
PHP:
  $sQuery = "SELECT * FROM time_s20 WHERE eintragid = '".$row['IDnum']."' ";  
  $rAttackResult = mysql_query($sQuery); 
  while ($aAttacks = mysql_fetch_assoc($rAttackResult)) { 

IF ($aAttacks == false)
      $iAttackable = 3;
      $iAttackgif = "OK.gif";
      $count = '';

...

Wie geht das ?

LG Andy
 
Hi,

ich bin mir nicht sicher, ob ich Dein Problem richtig verstehe. Es sieht für mich so aus, als wäre ein LEFT JOIN der beiden Tabellen die Lösung für Dich.

LG
 
Left join ? was ist denn das ?
Ich bin Anfänger sorry :-)

Ich will nur das die Variablen in der IF Anweisungen koreckt gefüllt werden :-) Auch wenn die zweite abfrage keine treffenden ergebnisse findet.
Weil im momment ist es so das wie oben beschrieben , die Variablen einmal gefüllt werden und diese innhalte bleiben drin, weil keine weitreren Einträge enthallten sind.
 
Zuletzt bearbeitet:
hallo,

mach es doch einfach so:

Speicher die Ausgabe von deiner zweiten Select Anweisung in einen
Array und dann durchlauf eben deine while Schlife so oft du willst und wenn
dass array eben kein Element mehr hat (mit if anweisung abfrage), dann gibts du deine Standartwerte aus.

Grüße
 
Tut mir leid, mit arrays habe ich wissentlich noch nicht gearbeitet , währe wohl ein weiterer Punkt den ich lernen sollte. Ich kann mir vorstellen das es so ginge wie du sagst. Die Tabelle die dann in ein array muß hat die Spalten :
userid,eintragid,time = ( time() + 12 Stunden ), timea = ( time() +144 minuten).
Das wären dann 4 verschiedene arrays denke ich , nur wie mache ich die ?

Könntest du mir eventuell einen code geben, wie ich es am besten machen könnte.

Sehr lieb bitte sag

LG Andy
 
Zuletzt bearbeitet:
Hi,

Deine Tabellen sind doch offensichtlich über "eintragid" und "IDNum" verknüpft. Und jetzt willst Du zu jedem Datensatz aus Tabelle 1 den entsprechenden aus Tabelle 2, falls vorhanden.

Probier mal folgende Abfrage auf Deinen Tabellen aus:

Code:
SELECT * FROM goldie_s20 
   LEFT JOIN time_s20 
   ON eintragid = IDnum
   ORDER BY Jahr DESC, 
      Monat DESC, 
      Tag DESC, 
      Stunde DESC, 
      Minute DESC 
   LIMIT 0, 5

Liefert das das, was Du haben wolltest?

Left join ? was ist denn das ?

Eine kurze Erklärung gibt's z.B. hier.

LG
 
Code:
   $test_array = new Array();

  $sQuery = "SELECT * FROM time_s20 WHERE eintragid = '".$row['IDnum']."' ";   
  $rAttackResult = mysql_query($sQuery);  
  while ($aAttacks = mysql_fetch_assoc($rAttackResult)) 
{  
  
   array_push($test_array, $rAttackResult);
}


Code:
$query  = "SELECT * FROM goldie_s20 ORDER BY Jahr DESC, Monat DESC, Tag DESC, Stunde DESC, Minute DESC LIMIT $offset, $rowsPerPage"; 
$result = mysql_query($query); 
$anz = mysql_num_rows($result); 
if($anz > 0){ 

$i = 0;
while($row = mysql_fetch_assoc($result)){  
if($i%2==0) { $trcolor = "#003333"; } else { $trcolor = "#005555"; } 
// ************************************************  Countdown part two Start 
echo '<tr bgcolor="'.$trcolor.'">'; 
 if($i <= count($test_array)-1)
{
   //deine neue Ausgabe
}
else
{
   $iAttackable = 3; 
      $iAttackgif = "OK.gif"; 
      $count = '';  
} 

 $i++  
}  

}

Tipp:
In deinen $test_array ist jetzt in jeden Feld wieder ein Array gespeichert
du kannst die Werte dann folgendermapen ansprechen
Code:
 $test_array = Array(Array("3","4"),Array("7","8"));

print_r($test_array);

echo $test_array[0][0];

oder wie in deinen Beispiel:

echo $test_array[$i][time];

Hoffe das funktioniert alles so.

Grüße Meccan
 
nein ! also Left join ist nicht das was ich brauche , weil den inhallt aus der anderen Tabelle will ich nicht ausgeben , sondern dazu benutzen ein Bild anzeigen zu lassen. Einmal ein Bild dafür das der eintrag von mir in den letzten 12 Stunden geändert wurde , dann für den Selben eintrag den ich geändert habe ein bild für alle anderen , das sie erst den eintrag in 144 Minuten wieder bearbeiten sollten , und ein weiteres Bild dafür das der Beitrag in den Letzten 12 Sunden nicht geändert wurde. Selbes Letztiges Bild auch für die Einträge die keinen gegeneintrag haben in der "time_s20" Tabelle.
 
Code:
   $test_array = new Array();

  $sQuery = "SELECT * FROM time_s20 WHERE eintragid = '".$row['IDnum']."' ";   
  $rAttackResult = mysql_query($sQuery);  
  while ($aAttacks = mysql_fetch_assoc($rAttackResult)) 
{  
  
   array_push($test_array, $rAttackResult);
}


Code:
$query  = "SELECT * FROM goldie_s20 ORDER BY Jahr DESC, Monat DESC, Tag DESC, Stunde DESC, Minute DESC LIMIT $offset, $rowsPerPage"; 
$result = mysql_query($query); 
$anz = mysql_num_rows($result); 
if($anz > 0){ 

$i = 0;
while($row = mysql_fetch_assoc($result)){  
if($i%2==0) { $trcolor = "#003333"; } else { $trcolor = "#005555"; } 
// ************************************************  Countdown part two Start 
echo '<tr bgcolor="'.$trcolor.'">'; 
 if($i <= count($test_array)-1)
{
   //deine neue Ausgabe
}
else
{
   $iAttackable = 3; 
      $iAttackgif = "OK.gif"; 
      $count = '';  
} 

 $i++  
}  

}

Tipp:
In deinen $test_array ist jetzt in jeden Feld wieder ein Array gespeichert
du kannst die Werte dann folgendermapen ansprechen
Code:
 $test_array = Array(Array("3","4"),Array("7","8"));

print_r($test_array);

echo $test_array[0][0];

oder wie in deinen Beispiel:

echo $test_array[$i][time];

Hoffe das funktioniert alles so.

Grüße Meccan

Danke dir für deine Tolle Hilfe , bin dir wirklich sehr dankbar , aber so ganz schlau werd ich da nicht so ganz , wo ist die IF anweisung hin ? Brauch ich die da jetzt nicht mehr ?
Ich dachte damit steht und fällt mein ganzes Vorhaben.
Eventuell stell ich mich jetzt blöd an , aber ich weiß echt nicht was da passiert ?

EDIT:
Außerdem sehe ich gerade du schreibst da was von $i= und $i=++ , ich habd da diese Variable schon in gebrauch für die wechselnde Hintergrundfarbe , macht das was ? oder geht das trotzdem ?

nochmal EDIT: Die Inhallte der arrays sollten erstmal in der if anweisung für das richtige Bild sorgen, dann eventuell die Passende Restzeit zum Eintrag ausgeben wär ok , muß aber nicht unbedingt sein .
War eventuell mein Fehler im code hab ich es unterlassen die ausgabe der betreffenden if anweisung an zu geben, möchte ich nachtragen.

PHP:
echo '<td align="center"><img border="0" src="../images/'.$iAttackgif.'">'.$count.'</td>';
 
Zuletzt bearbeitet:
Zurück