In mijn database bevat op het moment 20 kolommen en ca 80.000 regels. Met behulp van de volgende formule
<?php
$MeanTemp = mysql_query("SELECT AVG(Tempout) AS GemTemp FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "'");
if ($MeanTemp) {
$MeanTemp_result = mysql_fetch_array($MeanTemp);
$MeanTemp_result = number_format($MeanTemp_result['GemTemp'],1,'.','');
echo "<td>" . $MeanTemp_result . "</td>";
}else{
echo "$error";
}
?>
voer ik een qeury uit om van een bepaalde kolom en een bepaald aantal regels een gemiddelde te bepalen. Dit doe ik op één pagina met ca 10 vergelijkbare formules voor diverse kolommen. Nu is de pagina relatief traag bij het laden. Kan ik iets in de code veranderen (of een andere manier) om de laadtijd van de pagina te verkorten?
als die kolommen allemaal in een tabel staan moet het ook met één query kunnen. Verder mysql_fetch_assoc ipv mysql_fetch_array en zorgen voor de juiste datatypes in je database
function display_table_day($date)
{
$MeanTemp = mysql_query("SELECT AVG(Tempout) AS GemTemp FROM weerdata WHERE Date='" . $date . "'");
if ($MeanTemp) {
while ($MeanTemp_result = mysql_fetch_array($MeanTemp)){
$MeanTemp_result = number_format($MeanTemp_result['GemTemp'],1,'.','');
echo "<td>" . $MeanTemp_result . "</td>";
}
}else{
echo "$error";
}
$HiTemp = mysql_query("SELECT *, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY HiTemp DESC, Time ASC LIMIT 1");
if ($HiTemp) {
while ($HiTemp_result = mysql_fetch_array($HiTemp)){
echo "<td>". $HiTemp_result['HiTemp'] . "</td><td>" . $HiTemp_result['shorttime'] . "</td>";
}
}else{
echo "$error";
}
$LowTemp = mysql_query("SELECT *, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY LowTemp, Time ASC LIMIT 1");
if ($LowTemp) {
while ($LowTemp_result = mysql_fetch_array($LowTemp)){
echo "<td>" . $LowTemp_result['LowTemp'] . "</td><td>" . $LowTemp_result['shorttime'] . $Time . "</td>";
}
}else{
echo "$error";
}
$WindChill = mysql_query("SELECT *, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY WindChill, Time ASC LIMIT 1");
if ($WindChill) {
while ($WindChill_result = mysql_fetch_array($WindChill)){
echo "<td>" . $WindChill_result['WindChill'] . "</td><td>" . $WindChill_result['shorttime'] . "</td>";
}
}else{
echo "$error";
}
$HiBar = mysql_query("SELECT * FROM weerdata WHERE Date='$date' ORDER BY Bar DESC LIMIT 1");
if ($HiBar) {
while ($HiBar_result = mysql_fetch_array($HiBar)){
echo "<td>". $HiBar_result['Bar'] . "</td>";
}
}else{
echo "$error";
}
$LowBar = mysql_query("SELECT * FROM weerdata WHERE Date='$date' ORDER BY Bar ASC LIMIT 1");
if ($LowBar) {
while ($LowBar_result = mysql_fetch_array($LowBar)){
echo "<td>". $LowBar_result['Bar'] . "</td>";
}
}else{
echo "$error";
}
$HiWind = mysql_query("SELECT *, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY WindSpeed DESC, Time ASC LIMIT 1");
if ($HiWind) {
while ($HiWind_result = mysql_fetch_array($HiWind)){
$windeng = array( "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW" );
$windned = array( "N", "NNO", "NO", "ONO", "O", "OZO", "ZO", "ZZO", "Z", "ZZW", "ZW", "WZW", "W", "WNW", "NW", "NNW" );
$WindDir = str_replace($windeng, $windned, $HiWind_result['WindDir']);
echo "<td>". $HiWind_result['WindSpeed'] . "</td><td>" . $HiWind_result['shorttime'] . "</td><td>" . $WindDir . "</td>";
}
}else{
echo "$error";
}
$Rain = mysql_query("SELECT SUM(Rain) FROM weerdata WHERE Date='$date'");
if ($Rain) {
while ($Rain_result = mysql_fetch_array($Rain)){
echo "<td>" . $Rain_result[0] . "</td>";
}
}else{
echo "$error";
}
$RainRate = mysql_query("SELECT *, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY RainRate DESC, Time ASC LIMIT 1");
if ($RainRate) {
while ($RainRate_result = mysql_fetch_array($RainRate)){
echo "<td>". $RainRate_result['RainRate'] . "</td><td>" . $RainRate_result['shorttime'] . "</td>";
}
}else{
echo "$error";
}
$HiHum = mysql_query("SELECT * FROM weerdata WHERE Date='$date' ORDER BY OutHum DESC LIMIT 1");
if ($HiHum) {
while ($HiHum_result = mysql_fetch_array($HiHum)){
echo "<td>". $HiHum_result['OutHum'] . "</td>";
}
}else{
echo "$error";
}
$LowHum = mysql_query("SELECT * FROM weerdata WHERE Date='$date' ORDER BY OutHum ASC LIMIT 1");
if ($LowHum) {
while ($LowHum_result = mysql_fetch_array($LowHum)){
echo "<td>" . $LowHum_result['OutHum'] . "</td></tr>\n";
}
}else{
echo "$error";
}
}
//*******************************************************************************************************************************
function display_table_totalday($first_date, $second_date)
{
$MeanTemp = mysql_query("SELECT AVG(Tempout) AS GemTemp FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "'");
if ($MeanTemp) {
$MeanTemp_result = mysql_fetch_array($MeanTemp);
$MeanTemp_result = number_format($MeanTemp_result['GemTemp'],1,'.','');
echo "<td>" . $MeanTemp_result . "</td>";
}else{
echo "$error";
}
$HiTemp = mysql_query("SELECT HiTemp FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY HiTemp DESC LIMIT 1");
if ($HiTemp) {
$HiTemp_result = mysql_fetch_array($HiTemp);
echo "<td>". $HiTemp_result['HiTemp'] . "</td><td> </td>";
}else{
echo "$error";
}
$LowTemp = mysql_query("SELECT LowTemp FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY LowTemp ASC LIMIT 1");
if ($LowTemp) {
$LowTemp_result = mysql_fetch_array($LowTemp);
echo "<td>" . $LowTemp_result['LowTemp'] . "</td><td> </td>";
}else{
echo "$error";
}
$WindChill = mysql_query("SELECT WindChill FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY WindChill ASC LIMIT 1");
if ($WindChill) {
$WindChill_result = mysql_fetch_array($WindChill);
echo "<td>" . $WindChill_result['WindChill'] . "</td><td> </td>";
}else{
echo "$error";
}
$HiBar = mysql_query("SELECT Bar FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY Bar DESC LIMIT 1");
if ($HiBar) {
$HiBar_result = mysql_fetch_array($HiBar);
echo "<td>". $HiBar_result['Bar'] . "</td>";
}else{
echo "$error";
}
$LowBar = mysql_query("SELECT Bar FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY Bar ASC LIMIT 1");
if ($LowBar) {
$LowBar_result = mysql_fetch_array($LowBar);
echo "<td>". $LowBar_result['Bar'] . "</td>";
}else{
echo "$error";
}
$HiWind = mysql_query("SELECT WindSpeed FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY WindSpeed DESC LIMIT 1");
if ($HiWind) {
$HiWind_result = mysql_fetch_array($HiWind);
$windeng = array( "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW" );
$windned = array( "N", "NNO", "NO", "ONO", "O", "OZO", "ZO", "ZZO", "Z", "ZZW", "ZW", "WZW", "W", "WNW", "NW", "NNW" );
$WindDir = str_replace($windeng, $windned, $HiWind_result['WindDir']);
echo "<td>". $HiWind_result['WindSpeed'] . "</td><td> </td><td>" . $WindDir . "</td>";
}else{
echo "$error";
}
$Rain = mysql_query("SELECT SUM(Rain) FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "'");
if ($Rain) {
while ($Rain_result = mysql_fetch_array($Rain)){
echo "<td>" . $Rain_result[0] . "</td>";
}
}else{
echo "$error";
}
$RainRate = mysql_query("SELECT RainRate FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY RainRate DESC LIMIT 1");
if ($RainRate) {
while ($RainRate_result = mysql_fetch_array($RainRate)){
echo "<td>". $RainRate_result['RainRate'] . "</td><td> </td>";
}
}else{
echo "$error";
}
$HiHum = mysql_query("SELECT OutHum FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY OutHum DESC LIMIT 1");
if ($HiHum) {
while ($HiHum_result = mysql_fetch_array($HiHum)){
echo "<td>". $HiHum_result['OutHum'] . "</td>";
}
}else{
echo "$error";
}
$LowHum = mysql_query("SELECT OutHum FROM weerdata WHERE Date BETWEEN '" . $first_date . "' AND '". $second_date . "' ORDER BY OutHum ASC LIMIT 1");
if ($LowHum) {
while ($LowHum_result = mysql_fetch_array($LowHum)){
echo "<td>" . $LowHum_result['OutHum'] . "</td></tr>\n";
}
}else{
echo "$error";
}
}
?>
De eerste functie (1e deel tot de ****-lijn) wordt dmv een lus herhaalt zodat een html-tabel met 18 kolommen en maximaal 31 regels ontstaat. De 2e functie geeft nog een regel met een totaal per kolom van de 31 regels in de html-tabel. Ik hoop dat e.e.a. niet te groot is...
Verdiep jezelf even een beetje in indexen, das heeeel belangrijk.
MySQL ziet alle kolommen in een tabel apart, hierdoor scheelt het enorm als je inplaats van * de kolommen selecteert die je wil hebben. Al zijn het op 1 na alle kolommen, nog gaat je query sneller.