Abfrage Problem -> werte kommen nicht in die nächste schleife

Micha1976

Grünschnabel
Hi,

Ich habe folgendes problem, das der wert "nid" nicht mit in die nächste schleife mitgenommen wird bzw. es wird nur einer ausgegeben, obwohl 3 vorhanden sind.

Hier mal der Code:

PHP:
<?php

$dbhost = "localhost";
$dbuser = "xxx";
$dbpasswd = "xxx";
$mydb = "xxx";

$conn = mysql_connect($dbhost,$dbuser,$dbpasswd); 
@mysql_select_db($mydb) or die("Konnte Datenbank nicht ausw&auml;hlen: ".$mydb); 
 
$sql_query = ("SELECT * FROM wi_settings_2"); 
$result = mysql_query($sql_query) or die(mysql_error());

$sql_query_2 = ("SELECT * FROM wi_lang");
$result_2 = mysql_query($sql_query_2) or die(mysql_error());

while ($row = mysql_fetch_array($result))
   {

   while ($row2 = mysql_fetch_array($result_2))
    
   {
    echo $row2["custom_name"]." ".$row["nid"]."<br>";
   }
   }
?>

Die ausgabe sieht wie folgt aus:

Code:
name: Test1 NID: 47
Name: Test2 NID: 47
Name: Test3 NID 47

So müsste es aber richtig aussehn:

Code:
name: Test1 NID: 47
Name: Test2 NID: 79
Name: Test3 NID 80

Habe schon alles versucht, aber bekomme es nicht hin.
Bitte daher um Hilfe.

Hier noch die Tabellenstruktur der beiden Tabellen.
wi_settings_2 habe ich wegen der länge gekürzt.

Code:
das ist tabelle wi_lang:

CREATE TABLE `wi_lang` (
  `id` bigint(255) NOT NULL auto_increment,
  `u` varchar(10) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  `language` varchar(255) NOT NULL default '',
  `custom_server_name` varchar(255) NOT NULL default '',
  `custom_info1` varchar(255) NOT NULL default '',
  `custom_info2` varchar(255) NOT NULL default '',
  `custom_info3` varchar(255) NOT NULL default '',
  `custom_message1` varchar(255) NOT NULL default '',
  `custom_message2` varchar(255) NOT NULL default '',
  `custom_message3` varchar(255) NOT NULL default '',
  `custom_message4` varchar(255) NOT NULL default '',
  `custom_ip_x` varchar(50) NOT NULL default '',
  `custom_port_x` varchar(20) NOT NULL default '',
  `custom_farbeon_x` varchar(50) NOT NULL default '',
  `custom_farbeoff_x` varchar(50) NOT NULL default '',
  `custom_name` varchar(255) NOT NULL default '',
  `custom_cfg1` varchar(255) NOT NULL default '',
  `custom_cfg2` varchar(255) NOT NULL default '',
  `custom_cfg3` varchar(255) NOT NULL default '',
  `custom_cfg4` varchar(255) NOT NULL default '',
  `custom_cfg5` varchar(255) NOT NULL default '',
  `custom_cfg6` varchar(255) NOT NULL default '',
  `custom_cfg7` varchar(255) NOT NULL default '',
  `custom_cfg8` varchar(255) NOT NULL default '',
  `custom_cfg9` varchar(255) NOT NULL default '',
  `custom_cfg10` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM AUTO_INCREMENT=7 AUTO_INCREMENT=7

das ist wi_settings_2:

CREATE TABLE `wi_settings_2` (
  `nid` int(200) NOT NULL auto_increment,

[...]

  `custom_stop` varchar(255) NOT NULL default '',
  `custom_reset` varchar(255) NOT NULL default '',
  `custom_shell` varchar(255) NOT NULL default '',
  `custom_ip` varchar(255) NOT NULL default '',
  `custom_port` varchar(255) NOT NULL default '',
  `custom_cfg1` varchar(255) NOT NULL default '',
  `custom_cfg2` varchar(255) NOT NULL default '',
  `custom_cfg3` varchar(255) NOT NULL default '',
  `custom_cfg4` varchar(255) NOT NULL default '',
  `custom_cfg5` varchar(255) NOT NULL default '',
  `custom_cfg6` varchar(255) NOT NULL default '',
  `custom_cfg7` varchar(255) NOT NULL default '',
  `custom_cfg8` varchar(255) NOT NULL default '',
  `custom_cfg9` varchar(255) NOT NULL default '',
  `custom_cfg10` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`nid`)
) ENGINE=MyISAM AUTO_INCREMENT=81 AUTO_INCREMENT=81 ;
wi_settings_2 habe ich mal gekürzt weil is sonst zu lang.
 
Zuletzt bearbeitet:
1: while ($row = mysql_fetch_array($res))
2: {
4: $resT = $res1;
5: while($row1 = mysql_fetch_array($resT))
6: {
7: echo $row2["custom_name"]." ".$row["nid"]."<br>";
8: ";
9: }
10: }

evt. gehts so 2 while schlaufen du musst der 2 schlaufe doch den Wert der ersten übergeben oder nicht?
 
Hi,

So hatte ich es auch gehabt, aber nimmt nur einen Wert aus der ersten schleife mit :(

Die ausgabe sieht wie folgt aus:

Code:
name: Test1 NID: 47
Name: Test2 NID: 47
Name: Test3 NID 47

So müsste es aber richtig aussehn:

Code:
name: Test1 NID: 47
Name: Test2 NID: 79
Name: Test3 NID 80

Und das will nicht :(
 
Das is doch logisch guck dir mal dein Code an :suspekt:
Sorry haste bestimmt schon :p

PHP:
while ($row = mysql_fetch_array($result))
{
   while ($row2 = mysql_fetch_array($result_2)) 
   {
     echo $row2["custom_name"]." ".$row["nid"]."<br>";
   }
}

Zuerst läuft die erst while-Schleife und dort ist das Ergebnis nid = 47, dann macht er die innere vollständig durch, d.h. wenn es 3 Datensätze gibt 3mal und die gibst 3mal das gleiche aus mit $row["nid"].
Was du brauchst ist eine Verbindung, nur sehe ich da keine, also falls die beiden Tabellen was miteinander zu tun haben und das tun sie ja offensichtlich.
 
Zuletzt bearbeitet:
Hi,

Mitlerweile wurde das Problem anderweitig gelöst und zwar so...
habe 2 Tabellen angelegt die den gleichen Inhalt haben, aber einmal für EN und einmal für DE zuständig ist.

Das ist jetzt hier für DE und das selbe ist nochmal für EN und mit einer if schleife verknüpft und bisher Prima.

PHP:
$u = $_GET['u'];


if ($_GET['lang'] == "de")
{
$conn = mysql_connect($dbhost,$dbuser,$dbpasswd) or die(mysql_error());
@mysql_select_db($mydb) or die("Konnte Datenbank nicht ausw&auml;hlen: ".$mydb);

$sql_query = ("SELECT l.*, s.* FROM wi_lang_de l LEFT JOIN wi_settings_2 s ON l.hash=s.hash WHERE s.sid = '$u'");
$result = mysql_query($sql_query) or die(mysql_error());


while ($row = mysql_fetch_array($result))
   {
     echo $row["custom_name"]." - ".$row["nid"]."<br>";
   }


} else if ($_GET['lang'] == "en") {

$conn = mysql_connect($dbhost,$dbuser,$dbpasswd) or die(mysql_error());
@mysql_select_db($mydb) or die("Konnte Datenbank nicht ausw&auml;hlen: ".$mydb);

$sql_query = ("SELECT l.*, s.* FROM wi_lang_en l LEFT JOIN wi_settings_2 s ON l.hash=s.hash WHERE s.sid = '$u'");
$result = mysql_query($sql_query) or die(mysql_error());


while ($row = mysql_fetch_array($result))
   {
     echo $row["custom_name"]." - ".$row["nid"]."<br>";
   }

   }

Das Ergebnis kann sich sehn lassen. Aber wer ne bessere Lösung hat immer her damit ;)
 
Zurück