Hi,
ja es ist wieder das gleiche Theme, nur werden jetzt die Daten in zwei Tabellen geschrieben.
Mit Arrays bilden und Minimum mit php herausholen, kommt immer nur ein Datensatz.
Wie es jetzt ist kommt zumindest die richtige id_person herraus, was vorher mit nur einer TB nicht möglich war.
PHP-Code:
//Übergabe einer Variablen
$p=$_POST['p'];
//erst lösche ich alle bisherigen Einträge
DELETE FROM differenz1 WHERE p=$p
DELETE FROM differenz2 WHERE p=$p
//Daten zusammenstellen von 2 anderen Tabellen
SELECT number_projekt, id_projekt, number_person,id_person FROM tb_projekt, tb_person WHERE p=$p ORDER BY number_projekt
while ($zeile = mysql_fetch_object($result)) {
$id_projekt3= $zeile->id_projekt;
$id_person3 = $zeile->id_person;
$number_projekt = $zeile->number_person;
$number_person = $zeile->number_person;
//Ermitteln der Differenzen ung ggf Vorzeichen ändern
$diff=($number_projekt-$number_person)
if($diff<0)
{
$diff2=$diff*(-1);
}
else
{
$diff2=$diff;
}
//Die Daten werden in die Tabellen differnz1 und differenz2 geschrieben
INSERT INTO differenz1 (diff2,p,id_projekt4) VALUES('%s','%s','%s')",$diff2,$p,$id_projekt3
INSERT INTO differenz2 (diff4,p,id_person4) VALUES('%s','%s','%s')",$diff2,$p,$id_person3
//Min aus tb differenz1 ziehen
SELECT MIN(diff2) As difference, id_projekt4 FROM differen1 WHERE p=$p GROUP BY id_projekt4
//Und das richtige Team dazu aus der tb differenz2 holen
SELECT id_person4 ,diff4, diff2 FROM differenz1, differenz2 WHERE p=$p AND diff4=diff2
//Zum Schluß schreibe ich die id_person4 wieder in die Ausgangstabelle
Das gewünschte Ergebnis wäre
id_projekt ,id_person
1-2
2-5
3-7
Falls die Differenz aber bei verschiedenen id_projekt am kleinsten ist zu gleichen id_person gibt es ein nicht erwünschtes Ergebnis
id_projekt ,id_person
1-2
2-2
3-7
Das ganze ist so wie es jetzt ist natürlich sehr umständlich mit den ganzen DELETE und SELECT und noch ein SELECT Statement und das Einzige was mir noch einfällt ist, die Anzahl der jeweiligen id_person per COUNT zu erhalten, die doppelte Reihe zu löschen und alles nochmal zu durchlaufen.
Es gibt aber bestimmt eine viel bessere Lösung?