Willkommen in der Webstatt Zum Webstatt Blog und Stories
Christian am 10.03.06 14:29

Wusst leider kein besseren Titel :(
Also ich hab eine Tabelle "Lehrer" und eine "subject"
In der Spalte "subject" der Tabelle Lehrer stehen die Fächer eines Lehrers als ID, getrennt durch den Strint "~|||~" (z.b. ~|||~5~|||~3~|||~4)
Ich will jetzt die fächer ausgeben.

Mein Ansatz:
Mit explode auseinander nehmen
Zu jeder ID das passende Fach suchen
N String draus bilden
ausgeben

natürlich gehts nicht (liegt wohl daran, dass ich nichtmal schleifen richtig verstehe :\)

Code:

$a = explode("~|||~", $row['subject']);
while($b = $a){
$sql3 = mysql_query("SELECT name FROM subject WHERE id = '" . $b . "'");
$subject = mysql_fetch_assoc($sql3);
$fach .= $subject['name']." ";
}

netcup.de Warum gibt es hier Werbung?
leo am 10.03.06 14:32

ich rate dir auf eine zusätzliche tabelle zurückzugreifen, die ungefähr so aussieht:

subject_id, teacher_id oder wie auch immer.
dann hast du noch ne tabelle mit
subject_id, subject_name (brauchst du ja in deinem beispiel auch)

dann kannst du deine abfrage wie folgt gestalten

select `subject_name` from `subjects` where `teacher_id`="'.$deineid.'"

gruß, leo

Christian am 10.03.06 15:01

blos gut dass wir das grad nicht in info machen :\
hätt ich eigentlich auch selber drauf kommen können

Wie füg ich datensätze dann in die tabelle ein?
mit ner schleife?
da ich ja für jeden lehrer mehrere fächer hab, oder?

milahu milahu am 10.03.06 15:04

Quote
Original von Sucker
Wie füg ich datensätze dann in die tabelle ein?

Welche Datensätze?

Du hast drei Tabellen:
- Lehrer
- Fächer
- Verknüpfungen Lehrer-Fach

Alles andere ist reine Logik. Und ein Programmierer ohne Sinn für Logik ist kein Programmierer. :D

Christian am 10.03.06 15:11

die verknüpfung mein ich jetzt

und dass ich keine logik habe und mich nicht im entferntesten programmierer nennen darf ist selbst verfreilich :D

Die Ids der fächer bekomm ich über folgende select abfrage

<select name="subject[]" size="8" multiple id="subject">
<?php
$sql = mysql_query("SELECT id, name FROM subject ORDER BY name ASC");
while($row3 = mysql_fetch_array($sql)){
echo "<option value=\"" . $row3['id'] . "\">" . $row3['name'] . "</option>";
}
?>
</select>


Eintragen wäre dann sowas wie:
foreach ($_POST['subject'] as $a){
mysql_query("INSERT INTO zuordnung_fach (lehrernr, fachnr) VALUES ('$id', '$a')") or die(mysql_error());
}


Blos wie mache ich das jetzt wenn ich die Fächer verändern will?
Denn vllt hab ich jetzt ja mehr oder weniger fächer
erst alle fächer des lehrers löschen und dann wieder hinzufügen?

milahu milahu am 10.03.06 15:23

Quote
Blos wie mache ich das jetzt wenn ich die Fächer verändern will?
Mit einer update-Anfrage.

Quote
Denn vllt hab ich jetzt ja mehr oder weniger fächer
Welchen Unterschied macht das bei der Zuordnung Lehrer-Fach?

Christian am 22.03.06 15:59

jetzt muss ich doch noch mal fragen

es gibt ja theoretisch drei fälle

1. alle fächer bleiben gleich
2. es kommen fächer hinzu
3. es werden fächer gelöscht

bis jetzt hab ich folgenden code dafür:


foreach ($_POST['subject'] as $a){
mysql_query("UPDATE zuordnung_fach
SET fachnr = '$a'
WHERE lehrernr = $id") or die(mysql_error());
}


funktioniert natürlich nicht, aber ich hab leider keinen lösungsansatz :(

leo am 22.03.06 22:32

huhu,
spontan:
du kannst zuerst alle löschen und dann wieder alles ausgewählte mit INSERT INTO eintragen

gruß, leo

Christian am 23.03.06 13:39

hm jau denke das wird letzen endes die einzige möglichkeit sein...

kann das jemand bestätigen der schon öffter mit so verknüpfungen gearbeitet hat?

Michael Michael am 23.03.06 19:22

Ich habe nicht alle Posts gelesen, dennoch und deshalb versuche ich dir von Anfang an zu helfen:

Du brauchst 3 Tabellen:

1) lehrer = ID - Lehrer - ...
2) faecher = ID - Fach - ....
3) lehrer_faecher_zuordnung = ID - Fachid - Lehrerid

_________________

Auslesen aller Faecher eines Lehrers mit der ID $id:
SELECT lehrer.*, faecher.* FROM lehrer LEFT JOIN lehrer_faecher_zuordnung ON lehrer_faecher_zuordnung.Lehrerid = lehrer.ID LEFT JOIN faecher ON faecher.ID = lehrer_faecher_zuordnung.Faecherid WHERE lehrer.ID = $id

_________________

Löschen eines Lehrers mit der ID $id:
DELETE FROM lehrer WHERE ID = $id
DELETE FROM lehrer_faecher_zuordnung WHERE Lehrerid = $id

_________________

Löschen eines Faches (und aller Zuordnungen) mit der ID $id:
DELETE FROM faecher WHERE ID = $id
DELETE FROM lehrer_faecher_zuordnung WHERE Faecherid = $id

__________________

Löschen einer Zuordnung des Lehrers $Lehrerid mit dem Fach $Fachid:
DELETE FROM lehrer_faecher_zuordnung WHERE Lehrerid = $Lehrerid AND Faecherid = $Fachid

__________________

Hinzufügen einer des Lehrers $Lehrerid mit dem Fach $Fachid:
INSERT INTO lehrer_faecher_zuordnung (Lehrerid,Faecherid) VALUES ($Lehrerid,$Fachid)




Fehlen noch sinnvolle Abfragen?

Michael

Christian am 23.03.06 21:35

ändern eines lehrers :)

oder stimmst du zu, dass zuerst gelöscht und dann neu hinzugefügt werden muss?

Beim Auslesen reicht da nicht ein join?

hab das so gemacht:

SELECT z.lehrernr, z.fachnr, s.id, s.name
FROM zuordnung_fach as z LEFT JOIN subject as s
ON z.fachnr = s.id
WHERE z.lehrernr = lehrerid

Michael Michael am 23.03.06 21:39

Mit einem Join hast du nur die kompletten Daten der Fächer oder der Lehrer. Wenn dir da die Ids reichen, reicht auch ein Join.

Ändern eines Lehrers/Fachs ist ja ein normales UPDATE ... WHERE ID = $id

Ansonsten ist löschen überholter Zuordnungen sicherlich sinnvoll.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt