PHP/MySql Abfrage aus 2. Tabelle

BlauerCorsar

Grünschnabel
Moin.

Folgendes Problem:
Ich habe 2 Tabellen
1. fach[id/Fach/...]
2. inhalt[id/Fach/Prof/Name/Datei]
Primärschlüssel ist bei beiden im Moment id.

Ich möchte nun per php abfragen was in der ersten tabelle so alles für fächer drinstehen und diese als Link ausgeben lassen (bis hierhin kein problem). Nur wie erklär ich der Datenbank das wenn ich auf einen Link, zb.Fach1 klicke er mir dann nur die Files von Fach1 anzeigt?

Ich weiß das das ne sogenannte 1:n verbindung zwischen den tabellen existieren sollte (gibs das auch irgendwo in einfach erklärt wie man so eine beziehung erstellt?) , oder geht es auch irgendwie den geklickten link auszulesen und den namen dann als variable zu nehmen und in ein 2. query an die db zu setzen?

wäre für hilfe oder n stückel code der das erklärt dankbar

thx'n'mfg
 
Ja also das hast du richtig erkannt bei einem 1:n Aufbau empfehle ich dir folgende Struktur:

Tabelle Fach: id,fach
Tabelle Inhalt: id,fid,prof,name,datei

Dabei sind id jeweils primär schlüssel und auto_increment, die Fach.id ist mit der Inhalt.fid verbunden d.h. wenn du nun die Fächer ausgibst per link musst du in deinem query die id mitauslesen also: Select id,fach from Fach; dann per ausgabe die id an dem link mitgeben und beim zweiten Query dann einfahc anhand der id den Inhalt des Fachs auslesen
also: SELECT prof,name,datei from Inhalt where fid = $id; Wobei $id die id aus der Tabelle Fach ist.

Denke das sollte helfen
 
Hallo, dem Vorredner schließe ich mich mal an. Da das eventuell zielich schwierig zu verstehen ist, hier mal ein Code-Schnipsel:

PHP:
<?
//connecten
$linkid=mysql_connect(server,user,password);
//db wählen
mysql_select_db("dbname",$linkid);
//query string vorbereiten
$query=mysql_query("SELECT * FROM fach");
//schleife, damit alle subitem geholt werden
while($item=mysql_fetch_array($query)){
  $initem=mysql_fetch_array(mysql_query("SELECT * FROM inhalt WHERE fach='".$item['fach']."'"));
	echo $initem['Name'].$initem['Prof']; //etc...
  
}
?>

möglich wäre es auch beide Tabellen in eine zu packen und eine parent-child beziehung zu machen. Oder einen LEFT JOIN in der SQL Abfrage zu benutzen :)
 
Öhmn *überfordertgugg*

Erstma danke für die Tipps :o) , aber im Moment helfen die mir net so recht weiter oder funktionieren nicht, weil ich noch zu wenig sql kann :o/

Hier mal mein Code bis jetzt (also ohne die 2. Tabelle) --> http://phpfi.com/142844
Kann man in den nich irgendwie n query an die 2. tabelle einbauen?

@myvox, ich hatte vorher nur eine tabelle, aber da hatt' ich nochmehr probleme, weil er die fächer die mehrere inhalte hatten auch doppelt angezeigt wurden, und der DISTINCT-Befehl irgendwie ignoriert wurde -.-

Wäre cool wenn mir jmd mal ne Erweiterung für meinen Code geben könnt, oder mir noch n paar Tips

mfg BC
 
Ja also wiegesagt meine Lösung wäre optimaler aber du kannst auch folgendes machen.
Wenn Fach in der 1.Tab und 2. Tab nur jeweils einmal vorhanden sind dann:

PHP:
$query = "SELECT * FROM faecher WHERE MB ='ja' ORDER BY Fach ASC";
$result =  mysql_query( $query );
$anzahl = mysql_num_rows( $result );

echo '<center>';
echo '<br><font size="2">Anzahl der F&auml;cher: ' . $anzahl . '<br></br></font>';
echo '<table width="350">';
while ($row = mysql_fetch_object($result))
{
    $fach = $row->Fach;
    $sql = "SELECT * FROM tabelle2 WHERE Fach = '$fach';";
    $erg =  mysql_query( $query );
    $datensatz = mysql_fetch_object($erg);
    echo'<tr/><td align="left"/><a href="javascript:popup(520,450,\'<h2>'.$datensatz->Fach.'</h2>'.$datensatz->Prof.'\')">'.$datensatz->Fach.'</a/></td/></tr/>'; /* und in diesem popup soll halt nochmehr stehn, allerdings befinden sich diese informationen in der anderen tabelle*/

}

Das funktioniert nur wenn die Spalte Fach eindeutig deklariert ist aber eigentlich macht man sowas mit id's.
 
Danke für die Antwort, die hat mich einen großen Schritt nach vorn gebracht :)

Das funktioniert nur wenn die Spalte Fach eindeutig deklariert ist aber eigentlich macht man sowas mit id's.

D.h. wenn jedes Fach nur einmal in der 2. Tabelle vorhanden ist, oder? Das ist leider nicht so, manche Fächer sind dort zwar nur einmal vertreten, und andere halt mehrmals.

Und wie macht man denn sowas mit ID's ? Kann man das auch nutzen wenn die Tabellen sets und ständig erweitert werden?
Ich mein wenns mir jmd erklärt wie mans richtiger/besser macht mach ich das gern, in den Tabellen sind im Moment eh bloß 3-4 Testeinträge, also is ein Neuaufbau kein Problem....


[edit]
Problem gelöst, fallses jmd interessiert...
PHP:
	echo '<tr/><td align="left"/><a href="javascript:popup(520,450,\'<h2>'.$datensatz->Fach.'</h2>Anzahl: '.$anz;


	while (null != ($datensatz = mysql_fetch_object($erg)))				//solang
	{
		echo '<br>Datei: '.$datensatz->Datei.'<br>Art: '.$datensatz->Art ;
	}
	mysql_free_result($erg);





	echo '\')">'.$row->Fach.'</a/></td/></tr/>';
 
Zuletzt bearbeitet:
Zurück