Webstatt.org - Community seit 2006 - 2012 (2024?)

Problem mit explode, Schleifen, Abfragen..

user-150
10.03.2006 13:29

Wusst leider kein besseren Titel traurig
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 . "'"zwinkern;
$subject = mysql_fetch_assoc($sql3);
$fach .= $subject['name']." ";
}

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
user-228
10.03.2006 13: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ß, user-228

user-150
10.03.2006 14: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?

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-255
10.03.2006 14:04

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. Fettes Grinsen

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-150
10.03.2006 14:11

die verknüpfung mein ich jetzt

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

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"zwinkern;
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'zwinkern"zwinkern 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?

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-255
10.03.2006 14:23

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

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-150
22.03.2006 14: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"zwinkern or die(mysql_error());
}


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

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
user-228
22.03.2006 21:32

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

gruß, user-228

user-150
23.03.2006 12: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?

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-253
23.03.2006 18: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

user-150
23.03.2006 20:35

ändern eines lehrers lächeln

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

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-253
23.03.2006 20: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.