Schönen guten Tag,
Ursprünglich hatte ich mehrere Tabellen und zwei ineinander verschachtelte Schleifen.
Dann habe ich auf anraten verschiedener User alle Tabellen in eine gepackt und die Sache mit JOINs versucht:
Diese Abfrage liefert aber nur auf mysql-front ein result, ich denke da Leerzeilen vorhanden sind.
Nun werden einige sagen ich müsse einen RIGHT JOIN statt einem LEFT JOIN verwenden, aber ich möchte dass das Array genau so gefüllt wird, also mit leeren Zellen, es soll nicht zusammengezogen werden, wie es beim RIGHT JOIN passieren würde.
Am liebsten möchte ich das Abfrage-Ergebnis in einer Tabellenspalte einer anderen Tabelle speichern, jedoch da in die richtigen Zeilen. In etwa so:
Hierbei wird jedoch nur die erste Zeile abgespeichert.
Gruß Conny
Zur Erklärung:
Ich habe die Tabellen:
***********************************
kalender_2006:
gp_von [CHAR] | gp_datum[DATE]
--------------------------------------
hier stehen alle gps mit zugehörigem Datum
***********************************
************************************************** **
tipp_punkte_2006:
gp_von[CHAR] | user_ID [INT] | punkte[INT] | tipp[ENUM 'U','V','A']
-----------------------------------------------------------------------------------
Die ausgewerteten Tipps landen in dieser Tabelle
Sie sollen nach gp_von und tipp in 2 Gruppen:
Gruppe1 = teilnehmer (tipp = U)
Gruppe2 = andere (tipp = V || A)
sortiert werden.
************************************************** **
******************************************
teilnehmer_2006:
gp_von [CHAR]| teilnehmer [INT]| andere [INT]
--------------------------------------------------------------------
nun sollen sie in dieser Tabelle abgespeichert werden
*******************************************
letzlich sollen zwei Arrays erzeugt werden:
$teilnehmer = array();
$andere = array();
wichtig ist hier, das die Einträge die selbe Reihenfolge wie das gp_datum im kalender_2006 hat. Die Sache dabei ist, fehlt nun ein Eintrag in der Tabelle: tipp_punkte_2006, also ist eine Gruppe, die im Kalender vorkommt nicht vorhanden und eine spätere im kalender_2006 vorkommende Gruppe ist vorhanden, so soll diese Gruppe im Array nicht einfach fehlen, sondern durch '' oder 0 ersetzt werden.
Beispiel:
kalender_2006:
gp_von | gp_datum
-------------------------
AUS|2006-03-10
BRA|2006-04-12
GER|2006-07-07
ESP|2006-08-09
tipp_punkte_2006:
gp_von | user_ID | punkte | tipp
-----------------------------------------
AUS| 1| 10| U
AUS| 3| 15| U
AUS| 2| 12| V
GER| 1| 11| A
GER| 2| 14| U
ESP| 4| 15| V
ESP| 3| 16| A
AUS| 4| 13| U
teilnehmer_2006:
gp_von | teilnehmer | andere
AUS|3|1
BRA|0|0
GER|1|1
ESP|0|2
Die Arrays:
$teilnehmer = array(3,0,1,0);
$andere = array(1,0,1,2);
Bei mir wird aber der gp_von BRA nicht erfasst, da er in tipp_punkte_2006 nicht vorhanden ist und die Arrays werden zusammengezogen.
Ursprünglich hatte ich mehrere Tabellen und zwei ineinander verschachtelte Schleifen.
PHP-Code:
$jahr=2006;
// --------------------------------------------
$abfrage = "SELECT gp_von FROM kalender_".$jahr." ORDER BY gp_datum";
$result = mysql_query($abfrage,$conn);
$gp_counter = -1;
while ( $row = mysql_fetch_row($result))
{
$gp_counter = $gp_counter + 1;
$gp_von = $row[0];
$abfrage2 = "SELECT * FROM tipp_".$gp_von."_".$jahr;
$result2 = mysql_query($abfrage2,$conn);
$i = mysql_num_rows($result2);
$teilnehmer[$gp_counter] = $i;
}
PHP-Code:
SELECT t.* FROM kalender_2006 AS k
LEFT JOIN (SELECT gp_von, Count(gp_von) AS teilnehmer FROM tipp_punkte_2006
WHERE tipp = 'U' GROUP BY gp_von) AS t
USING (gp_von)
GROUP BY (k.gp_von);
Nun werden einige sagen ich müsse einen RIGHT JOIN statt einem LEFT JOIN verwenden, aber ich möchte dass das Array genau so gefüllt wird, also mit leeren Zellen, es soll nicht zusammengezogen werden, wie es beim RIGHT JOIN passieren würde.
Am liebsten möchte ich das Abfrage-Ergebnis in einer Tabellenspalte einer anderen Tabelle speichern, jedoch da in die richtigen Zeilen. In etwa so:
PHP-Code:
$jahr=2006;
// --------------------------------------------
$abfrage = "SELECT gp_von, Count(gp_von) AS tipp FROM tipp_punkte_".$jahr."
WHERE tipp = 'U' GROUP BY gp_von";
$result = mysql_query($abfrage,$conn);
$u=0;
while ($row = mysql_fetch_row($result))
{
$gp_von[$u] = $row[0];
$teilnehmer[$u] = $row[1];
$u=$u+1;
}
for($i=0; $i<mysql_num_rows($result); $i++)
{
$abfrage = "UPDATE teilnehmer_".$jahr." SET teilnehmer = '$teilnehmer[$i]'
WHERE gp_von = '$gp_von[$i]'";
$result = mysql_query($abfrage,$conn);
}
Gruß Conny
Zur Erklärung:
Ich habe die Tabellen:
***********************************
kalender_2006:
gp_von [CHAR] | gp_datum[DATE]
--------------------------------------
hier stehen alle gps mit zugehörigem Datum
***********************************
************************************************** **
tipp_punkte_2006:
gp_von[CHAR] | user_ID [INT] | punkte[INT] | tipp[ENUM 'U','V','A']
-----------------------------------------------------------------------------------
Die ausgewerteten Tipps landen in dieser Tabelle
Sie sollen nach gp_von und tipp in 2 Gruppen:
Gruppe1 = teilnehmer (tipp = U)
Gruppe2 = andere (tipp = V || A)
sortiert werden.
************************************************** **
******************************************
teilnehmer_2006:
gp_von [CHAR]| teilnehmer [INT]| andere [INT]
--------------------------------------------------------------------
nun sollen sie in dieser Tabelle abgespeichert werden
*******************************************
letzlich sollen zwei Arrays erzeugt werden:
$teilnehmer = array();
$andere = array();
wichtig ist hier, das die Einträge die selbe Reihenfolge wie das gp_datum im kalender_2006 hat. Die Sache dabei ist, fehlt nun ein Eintrag in der Tabelle: tipp_punkte_2006, also ist eine Gruppe, die im Kalender vorkommt nicht vorhanden und eine spätere im kalender_2006 vorkommende Gruppe ist vorhanden, so soll diese Gruppe im Array nicht einfach fehlen, sondern durch '' oder 0 ersetzt werden.
Beispiel:
kalender_2006:
gp_von | gp_datum
-------------------------
AUS|2006-03-10
BRA|2006-04-12
GER|2006-07-07
ESP|2006-08-09
tipp_punkte_2006:
gp_von | user_ID | punkte | tipp
-----------------------------------------
AUS| 1| 10| U
AUS| 3| 15| U
AUS| 2| 12| V
GER| 1| 11| A
GER| 2| 14| U
ESP| 4| 15| V
ESP| 3| 16| A
AUS| 4| 13| U
teilnehmer_2006:
gp_von | teilnehmer | andere
AUS|3|1
BRA|0|0
GER|1|1
ESP|0|2
Die Arrays:
$teilnehmer = array(3,0,1,0);
$andere = array(1,0,1,2);
Bei mir wird aber der gp_von BRA nicht erfasst, da er in tipp_punkte_2006 nicht vorhanden ist und die Arrays werden zusammengezogen.
Kommentar