ThWboard Support-Forum (Archiv)

Ort: / Boardübersicht / PHP / MySQL Probleme / Tabellenfeld einer anderen Tabelle als Nachschlagfeld benutzen


Seite 1 von 1

Gerry schrieb am 14.04.2003 um 22:05 Uhr

Guten Tag

Habe folgendes Problem: Ich habe eine Datenbank via phpmyadmin erstellt welche folgende Tabellen beinhaltet:

Tabelle SPIELER: mit Feldern Record (auto...), Spielername, Spielervorname, Team.

Tabelle TEAM: Record (auto...), Teamname, Spielername (INT)

Ich möchte nun, dass wenn ich einen Spieler in der Tabelle SPIELER eingebe mir die zur Auswahl stehenden Teams aus der TEAM-Tabelle zur Verfügung stehen. Wie muss ich die beiden Tabellen definieren???

master_mario schrieb am 15.04.2003 um 00:27 Uhr

"SELECT team.teamname FROM spieler INNER JOIN team ON spieler.spielername = '$spielername'";

Meinst Du das? Fragt den Teamnamen der Team-Tabelle ab wenn der Spielername in Team-Tabelle identisch ist mit dem Spielernamen in der Spieler-Tabelle.

$spielername ist deine Anfrage.

Gerry schrieb am 15.04.2003 um 07:55 Uhr

Nicht ganz, denn ich möchte ja Redundanzen vermeiden. In der Tabelle TEAM werden zum Beispiel alle Teams der Deutschen Eishockeyliga erfasst, das sind etwa 10 glaube ich. In der Tabelle SPIELER werden alle Spieler erfasst, welche in der DEL spielen, das sind etwa 20 pro Team, macht 200. Nun ist in der Tabelle SPIELER ja immer 20 mal der gleiche Name drin. Das möchte ich vermeiden. Wie muss ich in phpmyadmin die Felder derTabelle SPIELER und TEAM definieren, damit dies nicht passiert? Damit immer in der Tabelle SPIELER im Feld Team der entsprechende Zeiger auf das entsprechende Team in der Tabelle TEAM zeigt.

master_mario schrieb am 15.04.2003 um 10:33 Uhr

Du mußt in beiden Tabellen einen vergleichbaren Wert haben.

Spieler: ......, Spielername, Teamname, Teamid, .........
Team : ......, Teamname, Teamid, .................

etwa so.

Dann brauchst Du nur jedem Spieler, die Teamid des entsprechenden Teams zu geben.

Abfrage:

"SELECT team.teamname FROM spieler INNER JOIN team ON (spieler.teamid = team.teamid AND spieler.spielername = '$spielername')";

Wenn Du alle Spieler eines Teams suchst:

"Select spieler.spielername FROM spieler INNER JOIN team ON (spieler.teamid = team.teamid AND team.teamname = '$teamname')";

So brauchst Du Teams und Spieler nur jeweils ein mal angeben.

Ich hoffe das hilft Dir. :D

Gerry schrieb am 15.04.2003 um 13:01 Uhr

Jetzt geht's. Danke master_mario für Deine Hilfe.

globetrotter schrieb am 16.05.2003 um 10:30 Uhr

Nicht nur ihm!!! :D

Mich würde noch intressieren wie man die Daten am effektivsten eingeben und verknüpfen kann.
Z.B. werden Daten von einem Formular übergeben und in verschiedene Tabellen abgelegt.
Wie kann ich das machen???

master_mario schrieb am 16.05.2003 um 18:44 Uhr

Hm, da mußt Du was genauer werden. Also, was genau willst Du machen?
Was Du schreibst is ja noch kein Problem, geht einfach mit INSERT INTO oder UPDATE.

Mario

globetrotter schrieb am 17.05.2003 um 07:20 Uhr

Tja... siehst du, da treffen zwei Welten aufeinander! ;)
Mir fehlt im Moment noch das Verständnis für das Verknüpfen von Daten.

Bleiben wir mal bei dem Beispiel "Spieler in Team X".
Nun muss ich einen neuen Spieler für Team X zuordnen. Team X existiert bereits in der Tabelle "Team" und hat eine entsprechende ID. Sagen wir einfach mal 7.
Jetzt habe ich den neuen Spieler "Jupp Haudrauf" dem ich diesem Team zuordenen will. Der Spieler kommt in die Tabelle "Spieler" und erhält die Team ID 7.
Wie geht das jetzt bitteschön in SQL. :?

Ich habe mir einige Bücher über MySQL und PHP in Verbindung mit MySQL gekauft, aber das Problem wird da garnicht erörtert. Besonders die Bücher PHP mit MySQL sind wenig ergiebig. Bei manchen kann man auch sagen einfach nur peinlich. :(

master_mario schrieb am 18.05.2003 um 19:03 Uhr

Hallo

Erst mal was zu den Büchern. Kauf keins mehr, ich hab 6 zu php und noch 3 zu php mit mysql. Die nutze ich aber nur noch als Nachschlagewerke. Lernen kann man Programmieren (egal welche Sprache) nur by doing.

Zu dener Frage:

Ich mach es mal etwas länger.
Aber ohne mysqlconnect und den ganzen Kram

Datei 1 (formular für den Neuen Spieler)

<?php
 // Datenbankconnect....... nicht dargestellt 
 // auch dbfunctin ist nicht dargestellt, wie das alles funzt steht in den Büchern
 $teamtabelle = DBfunction("SELECT teamname, teamid FROM team ORDER BY teamname ASC");
 $teamlist = '<select name="teamid" size="1">';
 while( $teams = mysql_fetch_array ( $teamtabelle, MYSQL_BOTH ) )
  {
                $teamlist .= '<option value="'.$teams[teamid].'">'.$teams[teamname].'</option>';
  } 
 $teamlist .= '</select>';
 echo '
  <form action="add.php" method="post">
   Bitte den Spielernamen: <input type="text" name="spielername"></input><br><br>
   Bitte das Team wählen: '.$teamlist.'<br><br>
   <input type="submit" value="   speichern   "></input>
  </form> 
 ';
?>

Datei 2 add.php

dbfunction("INSERT INTO spieler SET spielername='$spielername', $teamid='$teamid'");
 echo 'Spieler gespeichert';

Also die beiden Dateien funzen so nich, aber das Prinzip stimmt. Bau dei Daten so aus das sie funktionieren und probier damit rum. Dann verstehst Du das ganz leicht.

Mario

Jonas schrieb am 18.05.2003 um 22:42 Uhr

ein tutorial zu JOINS gibts auf www.slware.com

globetrotter schrieb am 19.05.2003 um 07:11 Uhr

Prizip verstanden... hoffe ich zumindest :D . Das mit dem learnig by doing ist mir auch schon aufgefallen.

Vielen Dank!

Auch für den Link.

Seite 1 von 1