Daten aus 2 Tabellenlesen und ausgeben
Blackwane
- datenbank
Meine MYSQL Daten: MySQL - 5.0.32-Debian_7etch10-log
Hallo,
ich habe ein Bf2 Leaderboard wo alle Spieler Statistiken gespeichert werden.
Ich möchte jetzt gerne aus der Datenbank 2 sachen auslesen, die sich aber in 2 verschiedenen Tabellen befinden.
Einmal möchte ich goldstar aus der Tabelle stat_playerAwardMedals lesen.
Und einmal möchte ich den dazu gehörigen Spielernamen auslesen(nick), der sich in der Tabelle stat_playerAtt befindet.
In der Tabelle stat_playerAwardMedal gibt es folgende Felder:
id, pid, bronzeStar, silverStar, goldStar etc.
In der Tabelle stat_playerAtt gibt es folgende Felder:
id, pid, nick, globalScore, globalWins etc.
Ich möchte eine kleine Rang Statistik erstellen, wo man sehen kann, wer von uns die meisten Goldmedaillen hat.
Aussehen würde das ganze dann zb. so:
Goldmedaillen | Name
24 User 1
21 User 2
11 User 3
Hier erstmal meine Abfrage und ausgabe in PHP.
<?php
//hier Datenbank angaben
$host = "localhost"; // Adresse des Datenbankservers, meistens localhost
$user = "******"; // Ihr MySQL Benutzername
$pass = "******"; // Ihr MySQL Passwort
$db = "bf2"; // Name der Datenbank
$link = mysql_connect($host, $user, $pass) or die ("Keine Verbindung zu der Datenbank möglich.");
mysql_select_db($db, $link);
?>
<table>
<tr>
<td>Goldmedaillen</td>
<td> | </td>
<td>Name</td>
</tr>
<?php
$ergebnis=mysql_query("SELECT goldStar FROM stat_playerAwardMedals ORDER BY goldstar DESC");
while($ausgabe=mysql_fetch_object($ergebnis))
{
$goldStar=$ausgabe->goldStar;
?>
<tr>
<td><div align="center"><?php echo $goldStar ?></div></td>
<td></td>
<td></td>
</tr>
<?php
}
?>
</table>
Da fehlt jetzt nur noch, der dazugehörige name.
Ich hoffe ihr könnt mir dabei helfen, den namen aus der anderen Tabelle zulesen und richtig zuordnen.
Ich muss noch sagen, dass das meine erste eigene MYSQL abfrage ist ^^
Ich hoffe ihr versteht was ich meine und könnt mir bei meinem Problem helfen.
Vielen Dank für eure Hilfe
mfg Blackwane
Hallo,
Einmal möchte ich goldstar aus der Tabelle stat_playerAwardMedals lesen.
Und einmal möchte ich den dazu gehörigen Spielernamen auslesen(nick), der sich in der Tabelle stat_playerAtt befindet.In der Tabelle stat_playerAwardMedal gibt es folgende Felder:
id, pid, bronzeStar, silverStar, goldStar etc.In der Tabelle stat_playerAtt gibt es folgende Felder:
id, pid, nick, globalScore, globalWins etc.
$ergebnis=mysql_query("SELECT goldStar FROM stat_playerAwardMedals ORDER BY goldstar DESC");
Da fehlt jetzt nur noch, der dazugehörige name.
Ich hoffe ihr könnt mir dabei helfen, den namen aus der anderen Tabelle zulesen und richtig zuordnen.
Das ist eine einfache SQL Abfrage, wenn du in der Dokuweiter runter scrollst wirdst du ein Beispiel für eine Abfrage über mehrere Tabellen finden.
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE t1.name = t2.name;
Im Prinzip musst du in deiner Abfrage nurnoch die 2te Tabelle mittels Beispiel eintragen und die Felder, welche den gleichen Spieler identifizieren mit einander vergleichen[1].
[1] bei WHERE
Das ist eine einfache SQL Abfrage, wenn du in der Dokuweiter runter scrollst wirdst du ein Beispiel für eine Abfrage über mehrere Tabellen finden.
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE t1.name = t2.name;
Im Prinzip musst du in deiner Abfrage nurnoch die 2te Tabelle mittels Beispiel eintragen und die Felder, welche den gleichen Spieler identifizieren mit einander vergleichen[1].
[1] bei WHERE
Wenn ich das jetzt alles richtige verstanden habe, müsste meine sql abfrage so lauten:
"SELECT goldStar, nick FROM stat_playerAwardMedals AS t1, stat_playerAtt AS t2 WHERE goldStar = nick;");
Nur weiß ich nicht wie ich das ganze jetzt vergleiche.
Wie gesagt bin leider ein anfänger und hätte nicht gedacht das es so kompliziert ist ^^
Ich war schon froh als ich die erste abfrage hinbekommen habe ^^
Vielen Dank für die Hilfe
mfg Blackwane
Wenn ich das jetzt alles richtige verstanden habe, müsste meine sql abfrage so lauten:
"SELECT goldStar, nick FROM stat_playerAwardMedals AS t1, stat_playerAtt AS t2 WHERE goldStar = nick;");
Nur weiß ich nicht wie ich das ganze jetzt vergleiche.
Du vergleichst gerade GoldStart mit dem Nick, das wird nie Stimmen :).
Du muss nachschauen, welche Spalte in der Award-Tabelle den Spieler darstellt. Vermutlich ist es die PID, aber das musst du herausfinden, da ich nicht über deine Daten verfüge.
Wichtig währe noch, das du beim Vergleich der ID/PID angibst, welche Tabelle[1] dabei gemeint ist, da diese Felder in beiden Tabellen vorkommen.
Wie gesagt bin leider ein anfänger und hätte nicht gedacht das es so kompliziert ist ^^
Ich war schon froh als ich die erste abfrage hinbekommen habe ^^
Wenn man weiß was SQL kann, ist das eine sehr einfache Abfrage. Vieleicht hilfr es dir die abfrage zu übersetzten:
Wähle/Hole [felder] AUS/VON [tabellen name] ALS [tabellen alias] WENN [feld1] gleich [feld2]
[1] das macht man mit "tabellenname/alias.feldname" also "t1.pid"
Du vergleichst gerade GoldStart mit dem Nick, das wird nie Stimmen :).
Du muss nachschauen, welche Spalte in der Award-Tabelle den Spieler darstellt. Vermutlich ist es die PID, aber das musst du herausfinden, da ich nicht über deine Daten verfüge.
:)hm... ich weiß auch nicht welche Spalte meine Spieler dastellt^^
Die ID und PID sind überall gleich, theoretisch müsste es ja eig. egal sein welchen ich jetzt verwende. Ich benutze aber mal die "ID".
also muss nach dem Where die Tabelle und die Spalte "ID" rein?
also Where Tabelle1.ID = Tabelle2.ID
Wenn man weiß was SQL kann, ist das eine sehr einfache Abfrage. Vieleicht hilfr es dir die abfrage zu übersetzten:
Wähle/Hole [felder] AUS/VON [tabellen name] ALS [tabellen alias] WENN [feld1] gleich [feld2]
[1] das macht man mit "tabellenname/alias.feldname" also "t1.pid"
Ja, ich glaube wenn ich mal mehr freizeit habe. Sollte ich mal mehr MYSQL/PHP lernen^^
Was mich nur so verwirrt ist das [1].
Wo muss das hin???
Und was macht es???
Ich hoffe, das ich jetzt alles soweit bei der Abfrage verstanden habe und meine Abfrage so lauten müsste.
$ergebnis=mysql_query("SELECT goldStar, nick FROM stat_playerAwardMedals AS t1, stat_playerAtt AS t2 WHERE stat_playerAwardMedals.id = stat_playerAtt.id");
while($ausgabe=mysql_fetch_object($ergebnis))
stat_playerAtt AS t2 da ist es ja egal wie ich das "t2" nenne oder?
Ich könnte doch auch schreiben.
stat_playerAtt AS name
richtig???
Ich glaube, das ist nur die Variable die ich dann später weiter verwende.
:)hm... ich weiß auch nicht welche Spalte meine Spieler dastellt^^
Die ID und PID sind überall gleich, theoretisch müsste es ja eig. egal sein welchen ich jetzt verwende. Ich benutze aber mal die "ID".
Das bestätigt meine Vermutung. Die ID ist im Normalfall die Nummer des Datensatzes und die PID ist die Nummer des Spielers. Da jeder Datensatz ein Spieler ist und jeder Spieler ein Award Datensatz hat, sind Sie identisch.
also muss nach dem Where die Tabelle und die Spalte "ID" rein?
also Where Tabelle1.ID = Tabelle2.ID
ja
Ja, ich glaube wenn ich mal mehr freizeit habe. Sollte ich mal mehr MYSQL/PHP lernen^^
Wenn man so etwas machen möchte, ist das immer Hilfreich.
Was mich nur so verwirrt ist das [1].
Wo muss das hin???
Und was macht es???
[1], [2], [n]... das sind Randnotizen. Das heißt hier gibt es einen Optionalen Text, der steht immer ganz unten.
Hat also nichts mit der Abfrage zu tuhen, sondern erläutert nur das was ich geschrieben habe etwas.
Ich hoffe, das ich jetzt alles soweit bei der Abfrage verstanden habe und meine Abfrage so lauten müsste.
sieht gut aus
stat_playerAtt AS t2 da ist es ja egal wie ich das "t2" nenne oder?
Ich könnte doch auch schreiben.
stat_playerAtt AS name
richtig???
Ja, das ist nur das Alias. Es ist auch nur Optional und "AS name" kann weggelassen werden. Jedoch ist es hilfreich, da man es bei Feldaufrufen verwenden kann. z.b. stat_playerAwardMedals.id = t1.id
Ich glaube, das ist nur die Variable die ich dann später weiter verwende.
Genau, wobei Variable das falsche Wort dafür ist.
Okay, also die Abfrage habe ich soweit verstanden.
Danke erstmal, für deine Hilfe. Das du mir das alles so gut erklärst.
Ich glaube mit der Abfrage stimmt aber was nicht. Ich bekomme eine Fehlermeldung.
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/fuckthesun.de/httpdocs/clan-sta/stern.php on line 19
Hier mal meine PHP Datei:
<?php
//hier Datenbank angaben
$host = "localhost"; // Adresse des Datenbankservers, meistens localhost
$user = "******"; // Ihr MySQL Benutzername
$pass = "******"; // Ihr MySQL Passwort
$db = "bf2"; // Name der Datenbank
$link = mysql_connect($host, $user, $pass) or die ("Keine Verbindung zu der Datenbank möglich.");
mysql_select_db($db, $link);
?>
<table>
<tr>
<td>Goldmedaillen</td>
<td> | </td>
<td>Name</td>
</tr>
<?php
$ergebnis=mysql_query("SELECT goldStar, nick FROM stat_playerAwardMedals AS t1, stat_playerAtt AS t2 WHERE stat_playerAwardMedals.id = stat_playerAtt.id");
while($ausgabe=mysql_fetch_object($ergebnis))
{
$t1=$ausgabe->goldStar;
$t2=$ausgabe->nick;
?>
<tr>
<td><div align="center"><?php echo $t1 ?></div></td>
<td><div align="center"><?php echo $t2 ?></div></td>
<td></td>
</tr>
<?php
}
?>
</table>
Zeile 19 wäre:
while($ausgabe=mysql_fetch_object($ergebnis))
Was stimmt denn da nicht?
Ich blick da gerade überhaupt nicht durch :)
Okay, also die Abfrage habe ich soweit verstanden.
Danke erstmal, für deine Hilfe. Das du mir das alles so gut erklärst.
kein Problem
Ich glaube mit der Abfrage stimmt aber was nicht. Ich bekomme eine Fehlermeldung.
Die Fehlermeldung sagt dir nur, das mysql_query nichts hilfreiches zurückgegeben hat.
Was stimmt denn da nicht?
Ich blick da gerade überhaupt nicht durch :)
Das kann dir nur MySQL sagen, also brauchen wir deren Fehlermeldung[1].
$ergebnis=mysql_query("SELECT goldStar, nick FROM stat_playerAwardMedals AS t1, stat_playerAtt AS t2 WHERE stat_playerAwardMedals.id = stat_playerAtt.id");
Bau an dieser Stelle mal folgenes ein:
if (!$ergebnis) die(mysql_error());[code]
> [code lang=php]while($ausgabe=mysql_fetch_object($ergebnis))
...
[1] mysql_error
Okay,
jetzt bekomme ich folgende Fehlermeldung:
Unknown column 'stat_playerAwardMedals.id' in 'where clause'
Okay,
jetzt bekomme ich folgende Fehlermeldung:
Unknown column 'stat_playerAwardMedals.id' in 'where clause'
Da er die Spalte nicht kennt, scheinst du deine Datenstruktur nicht zu kennen.
Versuch es doch mal mit pid. Ansonsten schau dir deine Tabellen noch einmal an.
hm... mit PID funktioniert es auch nicht.
Ich habe dir mal 2 Screenshots von meiner Datenbank gemacht:
Vieleicht hilft uns das ja weiter
Vieleicht hilft uns das ja weiter
Nein, auf den ersten Blick sieht es richtig aus. Wobei ich wirklich die pid verweden würde. Du kannst versuchen mit den Tabellen-Alias (t1/t2) zu arbeiten oder diese speziellen Hochkommas verwenden, welche phpMyAdmin nutzt.
An dieser stelle kann man natürlich im phpMyAdmin herum experementieren, das geht schneller, als immer den Script zu ändern.
hm...
es muss irgendwie an das AS t1 etc. gelegen haben.
Jetzt funktioniert es, einwandfrei.
Hier nochmal meine PHP Datei:
<?php
//hier Datenbank angaben
$host = "localhost"; // Adresse des Datenbankservers, meistens localhost
$user = "******"; // Ihr MySQL Benutzername
$pass = "******"; // Ihr MySQL Passwort
$db = "bf2"; // Name der Datenbank
$link = mysql_connect($host, $user, $pass) or die ("Keine Verbindung zu der Datenbank möglich.");
mysql_select_db($db, $link);
?>
<table>
<tr>
<td><div align="center">Goldmedaillen</div></td>
<td></td>
<td><div align="center">Name</div></td>
</tr>
<?php
$ergebnis=mysql_query("SELECT goldStar, nick FROM stat_playerAwardMedals, stat_playerAtt WHERE stat_playerAwardMedals.pid = stat_playerAtt.pid ORDER BY goldstar DESC");
while($ausgabe=mysql_fetch_object($ergebnis))
{
$goldStar=$ausgabe->goldStar;
$nick=$ausgabe->nick;
?>
<tr>
<td><div align="center"><?php echo $goldStar ?></div></td>
<td></td>
<td><div align="center"><?php echo $nick ?></div></td>
</tr>
<?php
}
?>
</table>
Ich habe es jetzt noch sortiert. :D
Vielen Dank für deine Hilfe, hätte das alleine nicht hinbekommen.
Wünsche dir noch einen schönen abend und ein schönes WE.
mfg Blacki
hm...
es muss irgendwie an das AS t1 etc. gelegen haben.
Jetzt funktioniert es, einwandfrei.
Interesant.
Hier nochmal meine PHP Datei:
btw. du brauchst nicht den ganzen Script zu posten, wenn du eine Zeile geändert hast und es funktioniert.
Mahlzeit Blackwane,
nachdem ich mir diesen Thread angeschaut habe, keimt in mir der Verdacht, dass es bei Dir an grundlegendem Wissen über Datenbanken im Allgemeinen, MySQL im Besonderen sowie den Zugriff darauf von PHP aus hapert - ändere das!
Anschließend solltest Du Dir einmal Vinzenz' Artikel zur "Einführung in Joins" zu Gemüte führen.
MfG,
EKKi