Willkommen in der Webstatt
User-1 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?
User-2 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ß, xyz-118

User-1 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?

User-3 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

User-1 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?

User-3 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?

User-1 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 :(

User-2 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ß, xyz-118

User-1 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?

User-4 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?

xyz-141el

User-1 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

User-4 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