Werte aus mehreren Tabellen sortiert ausgeben

klanawagna

Erfahrenes Mitglied
Hi Leute!

Ich "küfel" (wohl österreichischer Ausdruck, kennt den sonst noch jemand?) grade an einem Problem mit Mysql:

Ich habe mehrere Tabellen, die in einer "Tabellen_Liste" verzeichnet sind mit dem Tabellennamen. In den Tabellen habe ich ein Datumsfeld. Ich will nun alle Einträge die einem Suchkritierium "ID" entsprechen ausgeben, allerdings nach dem Datum sortiert. Diese ID ist eine Spalte in den Tabellen der Tabellen_Liste.
Derzeit gebe ich sie so aus:

PHP:
     $ID = encode($_GET["ID"]);
     
     $query = mysql_query("SELECT * from __Benutzer WHERE ID ='".$ID."'");  
	  $result = mysql_fetch_array($query);
		
	$query="SELECT count(*) AS Anzahl FROM Tabellen_Liste";
	$rawdb=@mysql_query($query);
	$array=@mysql_fetch_array($rawdb);
	

		echo "<h1>".$result["Name"]."</h1>";
		echo "Klasse: ".$result["Klasse"];
		echo "<br> ";
				
	  	for($i = 0; $i < $array["Anzahl"]; $i ++)
		{
			$abfrage="SELECT * FROM `Tabellen_Liste` LIMIT ".$i." , 1"; 
			$test = mysql_fetch_assoc(mysql_query($abfrage));
			
			echo "<b>"$test["Name"].": </b>";
			
			$abfrage="SELECT * FROM `".$test["Name"]."_User` WHERE ID = ".$ID."";
			$student = mysql_fetch_assoc(mysql_query($abfrage));
			
			if(!$student)
			{
				echo "noch nicht begonnen! <br>";
			}
			else
			{
				
					if($student["gesamt"] < 1)
					{
						echo "am ".$student["Datum"]." begonnen, ";
					
						echo "nicht abgeschlossen! <br>";
					}
					else
					{
						echo "am ".$student["Datum"]." das letze mal, insgesamt ";
						echo $student["gesamt"]." mal abgeschlossen! <br>";
					}
			}

		}

Diese Ausgabe ist halt mehr oder weniger unsortiert.

Hat jemand eine Lösung?

Danke!
 
Zum sortieren die Resultate in einen Array zusammennehmen und diesen Sortieren.

Du solltest deine Queries überdenken.
Warum die TAbellen erst zählenund dann jede einzeln abfragen? Du kannst einfach alle abfragen und mit einer while-Schleife durchgehen. Ist schneller und viel einfacher
 
Mhm, soll das heißen, dass ich quasi:

SELECT * FROM Tabellex, Tabelley, Tabellez WHERE ID= $ID ORDER BY Datum ASC

schreiben kann?
 
nope

Das heisst anstelle des COUNT-Queries machst du gleich ein normales Query
SQL:
SELECT name FROM Tabellen_Liste

Anstelle deiner for-Schleife kannst du dan das folgende setzen
PHP:
while($tableDef = mysql_fetch_array($rawdb){
            $abfrage="SELECT * FROM {$tableDef ["Name"]}_User WHERE ID = {$ID};";
 
Zuletzt bearbeitet von einem Moderator:
Okay, das ist eine Codeoptimierung, ich werde sie einbauen!
Aber bei meinem Problem hilft ds leider nicht weiter...

Ich hätte einen Lösungsvorschlag: eine Temporäre Tabelle erzeugen, wo ich alle essenziellen Werte reinschreibe -> sortieren -> Tabelle löschen.

Möchte ich aber irgendwie vermeiden...
 
Zum sortieren die Resultate in einen Array zusammennehmen und diesen Sortieren.

Am besten sagtst du mal, nach was du sorteren willst. Dann können wir dir auch sagen wie.
Nach Studentennamen?
Nach $student["datum"]?

Sind diese Tabellen alle gleich aufgebaut? Wenn ja, warum verschiedene Tabellen?
 
Ich habe das jetzt gelöst, ich habe alle Werte in Arrays mit den gleichen Keys geladen, funktioniert jetzt folgendermaßen!

Danke an alle!

PHP:
		$tests = array();
		$results = array();
		$dates = array();
		
	  	for($i = 0; $i < $array["Anzahl"]; $i ++)
		{
			$abfrage="SELECT * FROM `__Tests_Liste` LIMIT ".$i." , 1"; 
			$test = mysql_fetch_assoc(mysql_query($abfrage));
			
			$abfrage="SELECT * FROM `".$test["Name"]."_User` WHERE ID = ".$ID."";
			$student = mysql_fetch_assoc(mysql_query($abfrage));
			
			array_push($tests, $test["Name"]);			
			
			if(!$student)
			{
				array_push($dates, "0");
				array_push($results, "0");
			}
			else
			{
				 array_push($dates, $student["Datum"]);
				 array_push($results, $student["gesamt"]);
			}				
		}
		
		arsort($dates);
		//print_r($dates);
		//echo "<br>";
		
		foreach($dates as $key => $value)
		{
			if($results[$key] != 0)  
			{
				echo "Hat am ".$value." den Test: ".leerzeichen($tests[$key])." abgeschlossen, <br> insgesamt ".$results[$key]." mal <br>";
			}
			else
			{
				echo "<br> Hat den Test: ".leerzeichen($tests[$key])." nicht abgeschlossen! <br>";		
			}
				echo " <a href=\"delete_student.php?ID=".$_GET["ID_Student"]."&Test=".$tests[$key]."&fu=res&del=no&ID_L=".$_GET["ID"]."\">Resultat l&ouml;schen</a> ";
				echo "<br><br>";	
		}
 
Zurück