MySQL Ausgabe doppelt
Christoph
- php
Hallo liebe Forumler,
ich habe da mal ein Problemchen...
Und zwar lasse ich Daten mir aus der Mysql Datenbank ausgeben, was auch klappt aber er gibt Sie mir leider doppelt aus, warum auch immer ;(
Hier mal mein Code:
<tr>
<td>Kunde:</td>
<td>
<select name="kundennr" onchange="document.forms[0].submit();">
<option value="0">Auswahl</option>
<?
# Alle Daten aus der Tabelle Kunden auslesen und per Kund_Name ordnen lassen
$result2 = mysql_query("SELECT * FROM Kunden ORDER BY Kund_Name") or die(mysql_error());
while ($row = mysql_fetch_row ($result2))
{
if ($kundennr == $row['0'] || $kundennr == $row['0'])
{
$kundenid = $row['0'];
?>
<option value="<?echo $row[0]?>" selected><? echo $row['1']?></option>
<?
}
else
{
?>
<option value="<?echo $row['0']?>"><? echo $row['1']?></option>
<?
}
}
?>
</select>
</td>
</tr>
<?
if($kundennr!="0" && $kundennr!="")
{
?>
<tr>
<td>Netzwerk:</td>
<td>
<select name="netzwerknr" onchange="document.forms[0].submit();">
<option value="0">Auswahl</option>
<?
$result4 = mysql_query("SELECT k.Kund_ID AS kid, n.Nw_IP AS nnip, n.Nw_ID AS nid, n.Nw_Kund_ID AS n_nid FROM Kunden AS k, Netzwerk AS n WHERE '$kundenid' = n.Nw_Kund_ID") or die(mysql_error());
while ($row2 = mysql_fetch_row ($result4))
{
if ($netzwerknr == $row2['0'])
{
?>
<option value="<?echo $row2['0']?>" selected><? echo $row2['1']?></option>
<?
}
else
{
?>
<option value="<?echo $row2['0']?>"><? echo $row2['1']?></option>
<?
}
}
?>
</select>
</td>
</tr>
Also er holt sich die Kunden ganz normal aus der Kundentabelle raus. Nachdem man sich dort ein Kunde ausgesucht hat soll das Netzwerk des Kunden erscheinen. Das geht auch, nur die IP Adressen die das netzwerk anzeigen gibt er mir doppelt aus... Weiß einer Rat?
im html siehts dann so aus:
<tr>
<td>Netzwerk:</td>
<td>
<select name="netzwerknr" onchange="document.forms[0].submit();">
<option value="0">Auswahl</option>
<option value="1" selected>192.17.23.253</option>
<option value="2">192.17.23.253</option>
<option value="1" selected>212.121.1212</option>
<option value="2">212.121.1212</option>
</select>
</td>
</tr>
Vielen Dank für eure Hilfe
Grüße
cg
Hi,
must du mal mit "GROUP by ip" versuchen, wirst dort sicher
die Ips doppelt in der DB haben ...
Gruß
Hi,
must du mal mit "GROUP by ip" versuchen, wirst dort sicher
die Ips doppelt in der DB haben ...Gruß
Hi romy,
nein die Ip´s stehen ganz normal nur einmal drin. Das ist es nicht...
Gruß cg
Hi cg
Hi romy,
wenn Du mich schon ansprichst antworte ich gleich mal
dein SQL-String könnte man etwas aufräumen
SELECT k.Kund_ID AS kid,
n.Nw_IP AS nnip,
n.Nw_ID AS nid,
n.Nw_Kund_ID AS n_nid
FROM Kunden AS k, Netzwerk AS n
WHERE '$kundenid' = n.Nw_Kund_ID
Mit sicherheit liegen die doppelten Datensätze an dem Full Join den Du machst, um Genaueres zu sagen müsste ich die Datenstruktur kennen.
Versuche also die Tabellen mit entsprechendem Operator zu verknüfpen, nämlich inner join oder Left join etc.
SELECT k.Kund_ID AS kid,
n.Nw_IP AS nnip,
n.Nw_ID AS nid,
n.Nw_Kund_ID AS n_nid
FROM Kunden k INNER JOIN Netzwerk n
ON n.Nw_kund_ID = [Name der gelichlautenden ID in der Kundentabelle]
WHERE n.Nw_Kund_ID = '{$kundenid}'
Bei Stringverknüpfen bitte die korrekte Syntax beachten
Auf das ON-Statement kommt es an, sonst nimm er jeweils immer einmaldie Daten aus der einen Tabelle und dann nochmals aus der anderen, da er nicht weiss wie eer zusammenfassen soll.
ciao
romy
hi romy, ja cool jetzt holt er alles so raus wie ichs will, jedoch wenn ich das jetzt auswähle die IP zeigt er mir noch was falsch an, bzw. er selected falsch:
<tr>
<td>Netzwerk:</td>
<td>
<select name="netzwerknr" onchange="document.forms[0].submit();">
<option value="0">Auswahl</option>
<option value="1" selected>192.17.23.253</option>
<option value="1" selected>212.121.1212</option>
</select>
</td>
</tr>
Da mal die Kundentabelle:
CREATE TABLE Kunden (
Kund_ID int(10) NOT NULL auto_increment,
Kund_Name varchar(200) NOT NULL,
Kund_Strasse varchar(200) NOT NULL,
Kund_Nr varchar(10) NOT NULL,
Kund_PLZ varchar(10) NOT NULL,
Kund_Ort varchar(200) NOT NULL,
Kund_Land varchar(200) NOT NULL,
Kund_Webseite varchar(200) NOT NULL,
Kund_Knr int(10) DEFAULT '0' NOT NULL,
PRIMARY KEY (Kund_ID),
UNIQUE Kund_ID (Kund_ID)
);
und die Netzwerktabelle:
CREATE TABLE Netzwerk (
Nw_ID int(10) NOT NULL auto_increment,
Nw_IP varchar(100) NOT NULL,
Nw_DNS varchar(100) NOT NULL,
Nw_Kund_ID int(10) DEFAULT '0' NOT NULL,
Nw_Gateway varchar(100) NOT NULL,
Nw_Subnet varchar(100) NOT NULL,
Nw_Bemerkung text NOT NULL,
Nw_SMTP varchar(100) NOT NULL,
Nw_POP3 varchar(100) NOT NULL,
Nw_Fernwartung text NOT NULL,
PRIMARY KEY (Nw_ID),
UNIQUE Nw_ID (Nw_ID)
);
habe deinen Rat angenommen und beim Netzwerk folgende Select geschrieben:
$result4 = mysql_query("
SELECT k.Kund_ID AS kid,
n.Nw_IP AS nnip,
n.Nw_ID AS nid,
n.Nw_Kund_ID AS n_nid
FROM Kunden k INNER JOIN Netzwerk n
ON n.Nw_kund_ID = k.Kund_ID
WHERE n.Nw_Kund_ID = '{$kundenid}'
") or die(mysql_error());
while ($row2 = mysql_fetch_row ($result4))
{
if ($netzwerknr == $row2['0'])
{
?>
<option value="<?echo $row2['0']?>" selected><? echo $row2['1']?></option>
<?
}
else
{
?>
<option value="<?echo $row2['0']?>"><? echo $row2['1']?></option>
<?
}
}
Grüße cg
Hi cg
ja cool jetzt holt er alles so raus wie ichs will, jedoch wenn ich das jetzt auswähle die IP zeigt er mir noch was falsch an, bzw. er selected falsch:
inwiefern falsch, sorry, habe deinen Satz nicht verstanden
davon abgesehen wundert es mich, dass DU row[0] so schreibst row['0'], Deine Zellen heissen doch nicht 0, sonder DU willst die Zelle 0.
Bsp.
Deine erste Spalte heisst IP und ist somit row['IP'] oder row[0]
ciao
romy
Hi romy,
keine Ahnung wie ich es am besten beschreiben soll :/
Er holt mir ja die Daten raus und schreibt Sie mir in mein Auswahlfeld, und wenn ich jetzt da noch die IP auswähle soll er mir die die ausgewählte IP beibehalten also "selected" in der HTML Sprache gesagt. Aber er "selected" mir beide...
vielleicht findest du ja nen Fehler :/
http://nopaste.php-q.net/22507
Grüße
cg
Hi
jetzt da noch die IP auswähle soll er mir die die ausgewählte IP beibehalten also "selected" in der HTML Sprache gesagt. Aber er "selected" mir beide...
<quote>
while ($row2 = mysql_fetch_row ($result4))
{
if ($netzwerknr == $row2['0'])
{
?>
<option value="<?echo $row2['0']?>" selected><? echo $row2['1']?></option>
<?
}
else
{
?>
<option value="<?echo $row2['0']?>"><? echo $row2['1']?></option>
<?
}
}
</quote>
jetzt habe ich es verstanden.
Es ist auch logisch, dass er beide "selectiert", da Dein row[0], was die ID ist, jedes mal auf 1 steht beim Vergleich.
Das Problem liegt also in Deiner Datenbank, Du hast doppelte IDs.
Jetzt stellt sich die Frage, wie die dort hinkommen obwohl Du auto_increment hast (aber übrigens kein 'unique').
Überprüfe nochmals Deine Einträge und ändere Gegebenfalls die ID's, die müssen eindeutig sein.
hier kommt nur ne Error-Seite
ciao
romy