Code einsparen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
anmeldung
anzahl
array
code
datenbank
folgen
freitag
machen
mittwoch
prosa
re
recherche
schleife
statement
summe
tag
unsinn
url
wochentag
-
Hallo werte tag/re">ref="/tag/code">Coder!
Ich habe mir einen php-Code zurecht geschrieben der folgendes macht:
Er zählt zu Beginn die Anzahl der Einträge in meiner Datenbank.
Dann zählt er wieviele Leute welchen Wochentag gewählt haben und berechnet zum Schluß die Prozent der gewählten Wochentage.
Funktioniert mit dem folgenden Code hervorragend und ohne Probleme.
Wenn man jetzt noch mehr Abfragen macht und alle so ähnlich sind wird die Menge des Codes ziemlich unübersichtlich und groß.
Frage: Kann ich auf irgendeine Art und Weise bei folgendem Vorgang Variablen bzw. Code einsparen?
//Wochentage Prozentzaehlung $abfanz = "SELECT * FROM anmeldung"; $erganz = mysql_query($abfanz); $anzahl = mysql_num_rows($erganz); $abfmo = mysql_query("SELECT SUM(mo) AS summe FROM anmeldung"); $abfdi = mysql_query("SELECT SUM(di) AS summe FROM anmeldung"); $abfmi = mysql_query("SELECT SUM(mi) AS summe FROM anmeldung"); $abfdo = mysql_query("SELECT SUM(do) AS summe FROM anmeldung"); $abffr = mysql_query("SELECT SUM(fr) AS summe FROM anmeldung"); $abfsa = mysql_query("SELECT SUM(sa) AS summe FROM anmeldung"); $abfso = mysql_query("SELECT SUM(so) AS summe FROM anmeldung"); $resmo = mysql_fetch_array($abfmo); $resdi = mysql_fetch_array($abfdi); $resmi = mysql_fetch_array($abfmi); $resdo = mysql_fetch_array($abfdo); $resfr = mysql_fetch_array($abffr); $ressa = mysql_fetch_array($abfsa); $resso = mysql_fetch_array($abfso); $zalmo = $resmo["summe"]; $zaldi = $resdi["summe"]; $zalmi = $resmi["summe"]; $zaldo = $resdo["summe"]; $zalfr = $resfr["summe"]; $zalsa = $ressa["summe"]; $zalso = $resso["summe"]; $promo = ($zalmo / $anzahl) * 100; $prodi = ($zaldi / $anzahl) * 100; $promi = ($zalmi / $anzahl) * 100; $prodo = ($zaldo / $anzahl) * 100; $profr = ($zalfr / $anzahl) * 100; $prosa = ($zalsa / $anzahl) * 100; $proso = ($zalso / $anzahl) * 100;
Ich wäre euch furchtbar Dankbar für Eure Hilfe.
lg
Markus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ener schrieb:
Das wird für ihn hilfreicher sein:
Ich hoffe das war hilfreich für dich.//Wochentage Prozentzaehlung $abfanz = "SELECT COUNT(*) AS count FROM anmeldung"; $erganz = mysql_query($abfanz); $anzahl = mysql_fetch_object($erganz)->count; $days = array('mo', 'di', 'mi', 'do', 'fr', 'sa', 'so'); $percents = array(); for($i = 0; $i < count($days); $i++) { $query = mysql_query("SELECT SUM({$days[$i]}) AS summe FROM anmeldung"); $ammount = mysql_fetch_object($query)->summe; $percents[$days[$i]] = ($ammount / $anzahl) * 100; } echo("Montag: {$percents['mo']}\n"); echo("Dienstag: {$percents['di']}\n"); echo("Mittwoch: {$percents['mi']}\n"); echo("Donnerstag: {$percents['do']}\n"); echo("Freitag: {$percents['fr']}\n"); echo("Samstag: {$percents['sa']}\n"); echo("Sonntag: {$percents['so']}\n");
-
Naja ich bin immer der Meinung, man sollte erst mal Ideen bringen und den "Schüler" zum nachdenken anregen. Er kann ja nachfragen wenn es nicht hilfreich ist. Aber gleich eine Lösung hinschreiben. Hm - langweilig.
-
Ich danke euch für die prompte Antwort!
@hackyourlife: Danke für den Code.
@ener: Ich werde natürlich dem Rat des Lehrers folgen und den Code nicht blind übernehmen sondern unter Recherche zerpflücken. Den natürlich bin ich schon über die Optionen mit Schleife zu arbeiten gestolpert, doch habe ich immer wieder versagt. -
mark084 schrieb:
@ener: Ich werde natürlich dem Rat des Lehrers folgen und den Code nicht blind übernehmen sondern unter Recherche zerpflücken. Den natürlich bin ich schon über die Optionen mit Schleife zu arbeiten gestolpert, doch habe ich immer wieder versagt.
Eine Schleife ist da ja auch Unsinn. Mach doch einfach möglichst viel über SQL:
$abf = mysql_query("SELECT COUNT(*) AS anzahl, SUM(mo) AS abfmo, SUM(di) AS abfdi, SUM(mi) AS abfmi, SUM(do) AS abfdo, SUM(fr) AS abffr, SUM(sa) AS abfsa, SUM(so) AS abfso FROM anmeldung"); $anzahl = $res["anzahl"]; $res = mysql_fetch_assoc($sql); $zalmo = $res["abfmo"]; $zaldi = $res["abfdi"]; $zalmi = $res["abfmi"]; $zaldo = $res["abfdo"]; $zalfr = $res["abffr"]; $zalsa = $res["abfsa"]; $zalso = $res["abfso"]; $promo = ($zalmo / $anzahl) * 100; $prodi = ($zaldi / $anzahl) * 100; $promi = ($zalmi / $anzahl) * 100; $prodo = ($zaldo / $anzahl) * 100; $profr = ($zalfr / $anzahl) * 100; $prosa = ($zalsa / $anzahl) * 100; $proso = ($zalso / $anzahl) * 100; ?>
-
Dann sagt uns doch mal, wieso das Array $days, die Schleife darüber und das Array $percents im Code von hackyourlife Unsinn ist.
-
trueweb schrieb:
Eine Schleife ist da ja auch Unsinn. Mach doch einfach möglichst viel über SQL:
Au ja, das SQL-Statement:
Handbuchseite zu AVGSELECT AVG( `mo` ) *100 AS `mo`, AVG( `di` ) *100 AS `di`, AVG( `mi` ) *100 AS `mi`, AVG( `do` ) *100 AS `do`, AVG( `fr` ) *100 AS `fr`, AVG( `sa` ) *100 AS `sa`, AVG( `so` ) *100 AS `so` FROM anmeldung
Der PHP-Code würde dann so aussehen:
$sql = "SELECT AVG( `mo` ) *100 AS `mo` , AVG( `di` ) *100 AS `di` , AVG( `mi` ) *100 AS `mi` , AVG( `do` ) *100 AS `do` , AVG( `fr` ) *100 AS `fr` , AVG( `sa` ) *100 AS `sa` , AVG( `so` ) *100 AS `so` FROM anmeldung"; $abf = mysql_query($sql); $erg = mysql_fetch_array($abf, MYSQL_ASSOC); $promo = $erg["mo"]; $prodi = $erg["di"]; $promi = $erg["mi"]; $prodo = $erg["do"]; $profr = $erg["fr"]; $prosa = $erg["sa"]; $proso = $erg["so"]; // alternativ: (Lieber die Version vom hackyoulife ^^⁾ $proz = array(); foreach($erg AS $tag => $val) { $proz[$tag] = $val; } // Version von Hackyoulife (post weiter unten): $proz = $erg;
Beitrag zuletzt geändert: 8.2.2012 20:38:44 von thomasba -
ener schrieb:
Dann sagt uns doch mal, wieso das Array $days, die Schleife darüber und das Array $percents im Code von hackyourlife Unsinn ist.
Der Code von hackyourlife macht zu viele SQL-Abfragen und zwar 8 Stück, einmal für die Gesamtanzahl der Einträge und anschließend in der Schleife für jeden weiteren Wochentag einen. Mein Code macht nur eine einzige Abfrage. Umso weniger Abfragen für die Datenbank, umso besser ist derren Auslastung und die Performance des Scriptes. Außerdem halte ich es für unsinnig, für eine feste Anzahl an Variablen (7 Stück, für jeden Wochentag eine) einen Array zu verwenden. Arrays machen erst bei unüberschaubaren oder ungewissen Menge an Variablen Sinn. Hier sind es sieben und es werden auch für alle Ewigkeiten sieben Wochentage bleiben.
Wenn ihrs aber ganz kurz wollt, dann hab ich was für euch:
$abf = mysql_query("SELECT COUNT(*) AS anzahl, SUM(mo) AS abfmo, SUM(di) AS abfdi, SUM(mi) AS abfmi, SUM(do) AS abfdo, SUM(fr) AS abffr, SUM(sa) AS abfsa, SUM(so) AS abfso FROM anmeldung"); $anzahl = $res["anzahl"]; $res = mysql_fetch_assoc($sql); $wochentage = array('mo', 'di', 'mi', 'do', 'fr', 'sa', 'so'); foreach($wochentage AS $tag) { $var= "pro".$tag; $$var= $res["abf".$tag] / $res["anzahl"] * 100; } echo "Montag: ".$promo."<br />"; echo "Dienstag: ".$prodi."<br />"; echo "Mittwoch: ".$promi."<br />"; echo "Donnerstag: ".$prodo."<br />"; echo "Freitag: ".$profr."<br />"; echo "Samstag: ".$prosa."<br />"; echo "Sonntag: ".$proso."<br />";
Beitrag zuletzt geändert: 8.2.2012 20:15:27 von trueweb -
thomasba schrieb:
Das kannst du dir gleich sparen und durch folgende Zeile ersetzen, die genau das gleiche macht:
// alternativ: $proz = array(); foreach($erg AS $tag => $val) { $proz[$tag] = $val; }
$proz = $erg;
Das assoziative Array ist mM nach besser als ein Haufen einzelner Variablen. Das Array kann auch in Schleifen/... benutzt werden; ansonsten müsstest du für die einzelnen Variablen wieder so ein Pfuschprogramm schreiben wie im Eröffnungspost (@trueweb: auch wenn es nur 7 Variablen sind).
Stell dir mal vor du möchtest die Prozentwerte einer Funktion übergeben und nutzt 7 einzelne Variablen... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage