kostenloser Webspace werbefrei: lima-city


2 MySQL-Tabellen in einer HTML-Tabelle darstellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Hallo,
    ich brüte gerade über folgendem Problem:
    Ich habe 2 MySQL-Tabellen:
    1) 1_name mit den Feldern id, name und geld
    2) 1_statistik name_id, von, bis, prozentsatz

    dabei werden die beiden Tabellen dadurch verknüpft, dass name_id auf die id in 1_name hinweist.
    Allerdings können die Zahlen in name_id mehrfach vorkommen.

    von und bis geben ein Start und ein Enddatum an.

    Ich möchte nun eine HTML-Tabelle haben, in er auf der Wagerechten "Achse" alle Namen angezeigt werden und auf der Senkrechten Achste die Zeitspanne von "von" bis "bis"

    Bisher sieht mein Code so aus:

    <?php
    $name = array();
    	$pqry = mysql_query("SELECT * FROM `".$userdata['id']."_name` ORDER BY `id`;");
    	echo "<span style=\"font-size: 0.7em;\"><table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">";
    	echo "<tr><td></td>";
    	while($tmp_name = mysql_fetch_array($pqry)) {
    		$name[] = $tmp_name;
    		echo "<td><a href=\"namestats.php?lookAt=name&name=".$tmp_name['name']."\">".$tmp_name['name']."</a></td>";
    	}
    	echo "<th>Durchschnitt:</tr>";
    	$dqry = mysql_query("SELECT * FROM `".$userdata['id']."_statistik` ORDER BY `von`, `bis`, `name_id`;");
    	
    	$tbl = count($name); // Wieviele Variablen in einer Reihe?
    	$c = 0;
    	$a = 0;
    	$b = 0;
    	$nameprozente = array();
    	while($stat = mysql_fetch_array($dqry)) {
    		$a++;
    		$b = $b + $stat['prozentsatz'];
    		if ( $c == 0 ) {
    			if($stat['prozentsatz'] >= 90) {
    				echo "<tr><td>".date("d.m.Y", $stat['von'])."&nbsp;".date("H:i", $stat['von'])."<br>".date("d.m.Y", $stat['bis'])."&nbsp;".date("H:i", $stat['bis'])."</td><td align=\"center\"><b><font color =\"green\">".$stat['prozentsatz']."%</font></b></td>";
    			} elseif($stat['prozentsatz'] > 50 && $stat['prozentsatz'] < 90) {
    				echo "<tr><td>".date("d.m.Y", $stat['von'])."&nbsp;".date("H:i", $stat['von'])."<br>".date("d.m.Y", $stat['bis'])."&nbsp;".date("H:i", $stat['bis'])."</td><td align=\"center\"><b><font color =\"orange\">".$stat['prozentsatz']."%</font></b></td>";
    			} else {
    				echo "<tr><td>".date("d.m.Y", $stat['von'])."&nbsp;".date("H:i", $stat['von'])."<br>".date("d.m.Y", $stat['bis'])."&nbsp;".date("H:i", $stat['bis'])."</td><td align=\"center\"><b><font color =\"red\">".$stat['prozentsatz']."%</font></b></td>";
    			}
    			$nameprozente[$c][] = $stat['prozentsatz'];
    			$c++;
    		}
    		elseif ( $c < ($tbl-1) and $c > 0 ) {
    			if($stat['prozentsatz'] >= 90) {
    				echo "<td align=\"center\"><b><font color =\"green\">".$stat['prozentsatz']."%</font></b></td>";
    			} elseif($stat['prozentsatz'] > 50 && $stat['prozentsatz'] < 90) {
    				echo "<td align=\"center\"><b><font color =\"orange\">".$stat['prozentsatz']."%</font></b></td>";
    			} else {
    				echo "<td align=\"center\"><b><font color =\"red\">".$stat['prozentsatz']."%</font></b></td>";
    			}
    			$nameprozente[$c][] = $stat['prozentsatz'];
    			$c++;
    		}
    		else {
    			if($stat['prozentsatz'] >= 90) {
    				echo "<td align=\"center\"><b><font color =\"green\">".$stat['prozentsatz']."%</font></b></td>";
    			} elseif($stat['prozentsatz'] > 50 && $stat['prozentsatz'] < 90) {
    				echo "<td align=\"center\"><b><font color =\"orange\">".$stat['prozentsatz']."%</font></b></td>";
    			} else {
    				echo "<td align=\"center\"><b><font color =\"red\">".$stat['prozentsatz']."%</font></b></td>";
    			}
    			
    			if($b/$a >= 100) {
    				echo "<td align=\"center\"><b><font color =\"green\">".round($b/$a, 4)."%</font></b></td></tr>\n";
    			} elseif($b/$a > 75 && $b/$a < 100) {
    				echo "<td align=\"center\"><b><font color =\"orange\">".round($b/$a, 4)."%</font></b></td></tr>\n";
    			} else {
    				echo "<td align=\"center\"><b><font color =\"red\">".round($b/$a, 4)."%</font></b></td></tr>\n";
    			}
    			$nameprozente[$c][] = $stat['prozentsatz'];
    			$c = 0;
    		}
    	}
    	echo "<tr><th>Durchschnitt:</th>";
    	foreach($nameprozente as $a) {
    		$i = 0;
    		foreach($a as $b) {
    			$i = $i + $b;
    		}
    		if($i/count($a) >= 100) {
    			echo "<td align=\"center\"><b><font color =\"green\">".round($i/count($a), 3)."%</font></b></td>";
    		} elseif($i/count($a) >> 75 && $i/count($a) << 100) {
    			echo "<td align=\"center\"><b><font color =\"orange\">".round($i/count($a), 3)."%</font></b></td>";
    		} else {
    			echo "<td align=\"center\"><b><font color =\"red\">".round($i/count($a), 3)."%</font></b></td>";
    		}
    	}
    	echo '<td align="center"><b>-----</b></td></tr></table></span>';
    	?>


    DAs Problem ist nun: Manchmal kommen neue Namen dazu. Die dementsprechend in den Datensätzen vorher nicht auftauchen.
    Sollte dies bei einem Datensatz der Fall sein, dann möchte ich gerne, dass dort drei Striche eingesetzt werden: "---".

    Ich hoffe auf eure Hilfe
    Vielen dank
    speedy
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. UUhhh!! OOHhhhh!! das ist eine schöne aufgabe!! leider wenige wollen mitmachen :o( bin mir nicht 100pro sicher ob ich den ganzen umfang der darstellung behirnt habe, aber wenn nur annähernd richtig denke, können wirs versuchen. dazu würde ich ein zwei dinge brauchen, aber vorher mein vorschlag:
    1. akzeptiere, dass mysql viel viel mehr kann als nur 'select * from ... blaaa'. dazu gleich ein beispiel:
    das:
    mysql> select id,
        ->        concat('<td>',givenn,'</td>') vorname,
        ->        concat('<td>',suren,'</td>') nachname,
        ->        concat('<td>',msg,'</td>') message
        -> from test.msg
        -> order by id;
    +----+------------------+-----------------+-----------------------------+
    | id | vorname          | nachname        | message                     |
    +----+------------------+-----------------+-----------------------------+
    |  1 | <td>Florian</td> | <td>Ricar</td>  | <td>sdfghjkl</td>           |
    |  2 | <td>ggg</td>     | <td>nachn1</td> | <td>sdf rtz rfbx fbxfc</td> |
    +----+------------------+-----------------+-----------------------------+
    2 rows in set (0.00 sec)
    was ja schon wie fertigen spalten aussehen. ja da fehlt aber anfang und ende der tabelle. von wegen! noch ein beispiel:
    mysql> /*
       /*>   die erste zeile ist eine psudotabelle
       /*>   mit 'null'-platzhalter für leere spalten
       /*>   wobei die id-spalte mitsamt nachfolger
       /*>   wegfallen könnte
       /*> */
    mysql> (select null id, '<table>' as 'table', null vorname, null nachname, null message)
        -> union           -- das ist nit die europäische ;o)
        -> (select id,     -- das ist schon bekannt
        ->        null,
        ->        concat('<tr><td>',nickn,'</td>') vn,
        ->        concat('<td>',suren,'</td>') nn,
        ->        concat('<td>',msg,'</td></tr>') msg
        -> from test.msg
        -> order by id
        -> )
        -> union
        -> -- und noch eine pseudotab. (siehe oben)
        -> (select null, '</table>', null,null,null);
    +------+----------+-------------------+-----------------+----------------------------------+
    | id   | table    | vorname           | nachname        | message                          |
    +------+----------+-------------------+-----------------+----------------------------------+
    | NULL | <table>  | NULL              | NULL            | NULL                             |
    |    1 | NULL     | <tr><td>Flo</td>  | <td>Ricar</td>  | <td>sdfghjkl</td></tr>           |
    |    2 | NULL     | <tr><td>Rici</td> | <td>nachn1</td> | <td>sdf rtz rfbx fbxfc</td></tr> |
    | NULL | </table> | NULL              | NULL            | NULL                             |
    +------+----------+-------------------+-----------------+----------------------------------+
    4 rows in set (0.00 sec)
    die ausgabe in php ist denkbar einfach (da muss man nicht einmal die NULL-en filtern, bei der ausgabe sind die auch nur Null :o), schematisch so:
    while ...
      echo $vorname$nachname$message;
    endwhile
    und so weiter und so fort ... bis alle daten richtig zusammen sind. das kann sql-mässig ziemlich wuchtig werden! paar Kb an reinem sql-code kann man da erwarten :o)) ja. und wenn du daran in etwa diesem stil basteln wills, kann ich dir gerne helfen. das ziel wäre, ein (ein einziges) query zu schreiben, das auf einmal alle daten abfragt, die nötigen werte berechnet und wie es oben zu sehen ist auch die tabelle gleich mit hineintut. was das bringt? also:
    - der sql server ist ca. 100x schneller als apache,
    - er ist ca. (bis) 1000x schneller als php.
    na wenn dann zusätzlich noch restaufgaben zwischen apache und php (+ noch mysql) hin und her geschleudert werden ..., kann man sich's ausmahlen! auf diese art habe in den letzten 10 jahren alle meine derartigen aufgaben lösen können. ich lasse nicht unerhebliche teile einer seite einfach direkt von sql generieren. weil es eben schneller ist und weniger kodemüll verursacht. ah ja. dadurt ist sowas auch resourcensparender ;o)
    und jetzt weiter nach eins (von oben)
    2. wenn ich dir helfen soll, brauche ich ein bisschen testdaten (funktionstüchtige [verknüpfungen]) von den 2 tabellen (habe leider keine zeit zum selber generieren) und eine etwas genauere darstellung der html-table (daten, abfrage und darstellung müssen in einheit gebracht werden).


    Beitrag zuletzt geändert: 16.10.2009 9:19:56 von czibere
  4. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Hallo,

    gerne nehme ich deine Hilfe an.
    Alles nötige hast du per PN bekommen.

    Ich würde mich wirklich freuen, dadurch etwas von dir lernen zu können.

    Gruß
    speedy
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!