Kreuztabellen Problem

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Kreuztabellen Problem

Beitrag von Dr.Death »

Hallo, ich habe vor ein kleines Script zu erstellen, das aus mehreren Tabellen Werte ausliest und in einer Kreuztabelle darstellt.

Tabellenstruktur:

user_id , username aus Tabelle phpbb_users

kurs_id, kurs_name, kurs_beschreibung, kurs_leiter aus Tabelle phpbb_kurse

und

ku_id, ku_user_id, ku_start, ku_ende aus Tabelle phpbb_kurse_user

Eine Abfrage bekomme ich zwar hin, aber wie bringe ich es hin, das das Endergebnis so aussieht:

Code: Alles auswählen


So soll es aussehen:

---------|--Kurs1---|---Kurs2---|---Kurs3---|---Kurs-m--
--User1--|--Datum1--|-----------|-----------|-----------
--User2--|----------|-----------|-----------|-----------
--User3--|----------|--Datum2---|-----------|-----------
--User4--|--Datum3--|-----------|-----------|-----------
--User5--|--Datum5--|-----------|-----------|-----------
--User-n-|----------|-----------|---Datum-o-|--Datum-p--



phpbb_kurse

kurs_id--|-kurs_name-|-kurs_beschreibung-|-kurs_leiter-
-------------------------------------------------------
----1----|---Kurs1---|---bla1------------|--2----------
----2----|---Kurs2---|---bla2------------|--2----------
----3----|---Kurs3---|---bla3------------|--2----------
----n----|---Kurs-n--|---bla-n-----------|--2----------


phpbb_kurs_user

ku_id--|-ku_user_id-|--ku_start--|--ku_ende--
---1---|----1-------|--Datum1----|-----0-----
---2---|----3-------|--Datum2----|-----0-----
---1---|----4-------|--Datum3----|-----0-----
---1---|----5-------|--Datum5----|-----0-----
---3---|----n-------|--Datum-o---|-----0-----
---m---|----n-------|--Datum-p---|-----0-----

Verschachtelte Abfragen sind mir immer noch ein Rätsel.

Selbst wenn ich es hinbekomme, wie übertrage ich die eigentliche Ausgabe , schön formatiert, in das phpbb Template ?
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

ich hatte mal ein ähnlcihes problem... ich hab das so gelöst:

Code: Alles auswählen

<?php
$i = 12;
$j = 0;
$sql = "SELECT day, time, moderator, thema FROM ".PLAN;
$query = mysql_query($sql);
while($res = mysql_fetch_object($query))
 {
 $moderator = $res->moderator;
 $day = $res->day;
 $time = $res->time;
 $mod_arr[$time][$day] = $moderator;
 }
while($i < 24)
 {
 $d = 0;
 echo "<tr><td align='center'>Ab ".$i.":00 Uhr</td>";
 for($d;$d<7;$d++)
   {
   $moderator = $mod_arr[$i][$d];
   if($moderator == "")
     {
     $moderator = "-x-";
     }
   echo "<td align='center'>".$moderator."</td>\n";
   }
 echo "</tr>\n";
 if($i == 23 AND $j == 0)
   {
   $i = -1;
   $j = 1;
   }
 if($i == 3 AND $j == 1)
   {
   $i = 24;
   }
 $i++;
 }
?>
allerdings nur für den inhalt der tabelle... die einteilung muss noch mit rein... vielleicht hilft dfas als anregung..

*edit*
der wcihtige teil ist eigentlcih der, in dem die daten abgefragt werden und in einem mehrdimensionalen array gespeichert werden. dann musst du dafür sorgen, dass dieses array zeile für zeile ausgelesen wird, also mit zwei while schleifen. oder for, oder was weiß ich... habs einmal so und einmal so gemacht....
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Danke für deinen Gedanken Anstoss !

Ich habs nun endlich hinbekommen.

Hier das Ergebnis, falls noch jemand so ein Problem hat:

Code: Alles auswählen

// Kurs Anzahl ermitteln	
	$sql_courses = "SELECT c_id, c_name FROM phpbb_course ";
	$result_courses = $db->sql_query($sql_courses);
	while ($row_courses = $db->sql_fetchrow($result_courses))
	{
		$count_courses++;
	}
	$courses = $count_courses;

		
// Erstelle dynamische Spalten Überschriften (Abhängig von der Kurs Anzahl)
	
	//Überschrift 1. Spalte - Kursteilnemer - Usernamen
	$template->assign_block_vars('planned_row', array(
		'L_USERNAME' => $lang['stoffel_user']
		)
	);	
	//Spaltenüberschriften der vorhandenen Kurse erstellen		
	$sql = "SELECT c_id, c_name FROM phpbb_course ORDER BY c_id ";
	$result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
		$template->assign_block_vars('planned_row.planned_colum', array(
			'V_DATE_USER' => '<a href="stoffel.php?planned_courses=OK&selected_course='	. $row['c_id']            . '">' . $row['c_name']          . '</a>'
			)
		);
	}

//Start Erstelle dynamische Spalten : Usernamen - Kurs1 - Kurs2 - Kurs3 ---- Kurs n

	//Starte ersten Loop - Von Kursteilnehmer 1 bis Kursteilnehmer n
	// User Anzahl ermitteln	
	$sql_user = "SELECT u.user_id, u.username, c.c_id, c.c_name, cu.cu_id, cu.cu_id_course, cu.cu_id_user, cu.cu_date_planned, cu.cu_date_done 
				FROM phpbb_users u, phpbb_course c, phpbb_course_user cu 
				WHERE u.user_id > '-1'
				AND c.c_id = cu.cu_id_course
				AND u.user_id = cu.cu_id_user
				AND cu.cu_date_planned != 0 
				AND cu.cu_date_done = 0
				GROUP BY u.username 
				ORDER BY u.username, c.c_name";
	$result_user = $db->sql_query($sql_user);
	
	while ($row_user = $db->sql_fetchrow($result_user))
	{
		$temp_user = $row_user['user_id'];
		
		$template->assign_block_vars('planned_row', array(
			'L_USERNAME' => '<a href="stoffel.php?planned_users=OK&selected_user=' . $row_user['user_id'] . '">' . $row_user['username'] . '</a>'
			)
		);
		
		//Vorhandene Kurse für Teilnehmer auslesen
		$c = '1';
		for($c;$c<($courses+1);$c++)
		{
			$sql_courses = "
				SELECT u.user_id, u.username, c.c_id, c.c_name, cu.cu_id, cu.cu_id_course, cu.cu_id_user, cu.cu_date_planned, cu.cu_date_done 
				FROM phpbb_users u, phpbb_course c, phpbb_course_user cu 
				WHERE cu.cu_id_user = $temp_user   
				AND c.c_id = $c
				AND c.c_id = cu.cu_id_course
				AND u.user_id = cu.cu_id_user
				AND cu.cu_date_planned != 0 
				AND cu.cu_date_done = 0
				ORDER BY c.c_id";
			$result_courses = $db->sql_query($sql_courses);
			$row_courses = $db->sql_fetchrow($result_courses);
			
			//Prüfung ob ein Kurs Eintrag vorliegt
			if(( ($c) == $row_courses['cu_id_course']) )
			{		
				$template->assign_block_vars('planned_row.planned_colum', array(
				'V_DATE_USER'	=> '<a href="stoffel.php?planned_courses=OK&selected_course=' . $row_courses['c_id'] . '&selected_date=' . $row_courses['cu_date_planned'] .'">' . $row_courses['cu_date_planned'] . '</a>'
					)
				);
			}
			else
			{
				$template->assign_block_vars('planned_row.planned_colum', array(
				'V_DATE_USER' => '&nbsp;'
					)
				);
			}	// Ende Prüfung ob ein Kurs Eintrag vorliegt
			
		}	//Ende Vorhandene Kurse für Teilnehmer auslesen
		
	}	// Ende vom ersten Loop - Kursteilnehmer 1 bis Kursteilnehmer n
Hier der Template Bereich:

Code: Alles auswählen

					<!-- BEGIN planned_row -->
					<tr>
						<td valign="middle" width="10%" align="left" class='gen'>{planned_row.L_USERNAME}</td>
					<!-- BEGIN planned_colum -->
						<td valign="middle" width="10%" align="left" class='gen'>{planned_row.planned_colum.V_DATE_USER}</td>
					<!-- END planned_colum -->
					</tr>
					<!-- END planned_row -->
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

klasse arbeit... schön, dass ich helfen kontte, acuh wenn ich nur meinen code zur verfügung gestellt hab ;-)
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Danke für die Blumen :-)

Das ist das erste Entwicklungsstadium. Ich versuche einen webbasierenden Schulungsplan zu erstellen.

Mittlerweile wächst das Projekt täglich....und diese Kreuztabelle war für mich die "grösste" Hürde....bis jetzt :wink:
Antworten

Zurück zu „Coding & Technik“