hallo,
wie einige von euch vllt schon mitbekommen haben, bastel ich an einem tarifvergleich. ich habe nun einen tarifrechner, wo man werte für festnetztelefonie, mobilfunk, anzahl sms und mailboxabfragen...
nun gibt er mir auf der nächsten seite eine tabelle mit allen anbieter aus und rechnet fixkosten (grundgebühr) mit den telefonie und messaging kosten zusammen.
Jetzt möchte ich versuchen, das immer nur die 10 günstigsten tarife angezeigt werden, sortiert nach dem günstigsten absteigend. nun kommt aber gerade der monatliche gesamtpreis nicht aus der datenbank sondern wurde ja eben erst errechnet...
Nun könnte ich den wert in der datenbank ablegen und dann wieder sortiert ausgeben lassen...aber das würde doch auf dauer komplett alles sprengen wenn für jeden tarifvergleich ein eintrag angelegt wird?
gibt es da noch andere lösungen?
gruß
Max
etwas zum knobeln ;) problem mit db + php
-
-
Du geizt mit Informationen. Wie sieht die Tabelle aus, was wird wie berechnet?
-
Schritt 1:
Du hast ein Array mit den Tarifen
Schritt 2:
Du legst ein zweites Array mit den selben Indizes aber anderen Werten an
Schritt 3:
asort anwenden
Schritt 4:
Mit foreach oder current/next/each/key die ersten zehn ausgebenViele liebe Grüße
The User -
hier mal die website, damit ihr mehr infos bekommt... wie gesagt: noch im aufbau
http://www.simkarten-discounter.de/simkarten-test…ner_results.php
werte können schon eingegeben werden, die auswertung findet auch schon statt...
Das ganze ist so aufgebaut:
PHP
Alles anzeigen<? $result = mysql_query("SELECT * FROM tarif WHERE anbieternr!='' ORDER BY tarif asc ", $connectionid); $f=mysql_num_rows($result); $all=$f; if ($f > 500) { $f=500; } $t=1; if (!isset($_GET[page])) { $anfang=0; $ende=0; } else { $page=$_GET[page]; $ph=$page*500; $ende=$ph; $pj=$ph-500; $anfang=$pj; } while ($f >= $t) { $ende++; $load = mysql_query("SELECT * FROM tarif WHERE anbieternr!='' ORDER BY tarif asc LIMIT $anfang, $ende"); $tarif = mysql_fetch_array($load); $load2 = mysql_query("SELECT anbieter, tag FROM anbieter WHERE anbieternr='$tarif[anbieternr]'"); $anbieter = mysql_fetch_array($load2); ?>
.....
PHP<? $einrichtung = $tarif[einrichtungspreis] - $tarif[startguthaben]; ?> <? echo $einrichtung; ?>
.....
.....
PHP
Alles anzeigen<? $festnetz_var = $_POST[festnetz_var]; $festnetz_db = $tarif[festnetz]; $festnetz = $festnetz_var * $festnetz_db; $mobilfunknetz_var = $_POST[mobilfunknetz_var]; $mobilfunknetz_db = $tarif[mobilfunknetz]; $mobilfunknetz = $mobilfunknetz_var * $mobilfunknetz_db; $sms_var = $_POST[sms_var]; $sms_db = $tarif[sms]; $inklusivsms = $tarif[inklusivsms]; if ($inklusivsms > $sms_var) $sms_differenz = 0; else $sms_differenz = $sms_var - $inklusivsms; $sms = $sms_differenz * $sms_db; $mailboxabfrage_var = $_POST[mailboxabfrage_var]; $mailboxabfrage_db = $tarif[mailboxabfrage]; $mailboxabfrage = $mailboxabfrage_db * $mailboxabfrage_var * 2; $kosten_var = $festnetz + $mobilfunknetz + $sms + $mailboxabfrage; ?> <? echo $kosten_var; ?>
.....
PHP
Alles anzeigen<? $kosten_min = $tarif[mindestumsatz]; if ($kosten_min > $kosten_var) $kosten_differenz = 0; else $kosten_differenz = $kosten_var - $kosten_min; $summe = $kosten_differenz + $fix; ?> <? echo $summe; ?>
.....
wie kann ich die werte denn in ein array bringen und das sortiert ausgeben? wie ich die ausgabe auf 10 stück reduziere bekomm ich glaube noch selbst hin. danke -
Im Moment kann ich mir das nicht in Ruhe ansehen, erst heute Abend. Aber bis dahin kannst du schon mal an den Anfang deiner Scripte diese Zeilen
PHPerror_reporting(E_ALL); ini_set("display_errors", true); // Falls hier ein Warning (ini_set disabled)ausgespuckt wird, Zeile wieder rausnehmen
einbauen und sämtliche Meldungen ausbügeln. Damit hast du dann schon mal was zu tun.
Und noch ein Hinweis:
PHP$result = mysql_query("SELECT * FROM tarif WHERE anbieternr!='' ORDER BY tarif asc ", $connectionid); $f=mysql_num_rows($result);
Nur um die Anzahl herauszubekommen ein "Select *" auf die DB loszulassen, ist GRAUSAM!!! -
vielen dank schonmal, werde das alles umbauen
-
also fehler wurden beseitigt...sollte ich vllt öfter mal machen
-
Also, ich habe das mal kurz überflogen, dabei sind folgende Probleme aufgefallen:
- Du postest einen gestückelten Quellcode
- Der Quellcode ist nicht ordentlich eingerückt und somit für eine Problemanalyse unbrauchbar.
-
nun ja...eine problemanalyse ist auch nicht unbedingt notwendig... der code funktioniert ja. du wolltest etwas mehr über die tabelle wissen, die erstellt wird, ich hab dir den link zur website gepostet. ich versuche nur herauszufinden, wie ich das mit den arrays machen muss, damit er mir die tabelle nach "$summe" absteigend anzeigt
-
eine problemanalyse ist auch nicht unbedingt notwendig
Und warum gibt es dann diesen Thread???
der code funktioniert ja.
Aber nicht wie er soll.
ich versuche nur herauszufinden, wie ich das mit den arrays machen muss, damit er mir die tabelle nach "$summe" absteigend anzeigt
Schön, aber um dir da helfen zu können, muss man zuerst einmal einen Überblick bekommen, wie wo wann was berechnet wird. Und da dies mit dem verstümmelten und unleserlichen Quellcode nur sehr schwer ist, wirst du auf meine Hilfe verzichten müssen. Ich habe keine Lust, erst mal alles ordentlich einzurücken, wobei das fast unmöglich ist, wenn man den Zusammenhang nicht erkennen kann.
Daher wünsche ich dir viel Erfolg bei der Lösungsfindung. -
Also du solltest count(*) verwenden, um die Größe auszulesen.
Aus dem Teil, der für die Berechnung zuständig ist, solltest du wenigsten mal eine Funktion machen:PHP
Alles anzeigenfunction tarifKosten($tarif) { $festnetz_var = $_POST[festnetz_var]; $festnetz_db = $tarif[festnetz]; $festnetz = $festnetz_var * $festnetz_db; $mobilfunknetz_var = $_POST[mobilfunknetz_var]; $mobilfunknetz_db = $tarif[mobilfunknetz]; $mobilfunknetz = $mobilfunknetz_var * $mobilfunknetz_db; $sms_var = $_POST[sms_var]; $sms_db = $tarif[sms]; $inklusivsms = $tarif[inklusivsms]; if ($inklusivsms > $sms_var) $sms_differenz = 0; else $sms_differenz = $sms_var - $inklusivsms; $sms = $sms_differenz * $sms_db; $mailboxabfrage_var = $_POST[mailboxabfrage_var]; $mailboxabfrage_db = $tarif[mailboxabfrage]; $mailboxabfrage = $mailboxabfrage_db * $mailboxabfrage_var * 2; $kosten_var = $festnetz + $mobilfunknetz + $sms + $mailboxabfrage; return array('Gesamt' => $kosten_var, 'Festnetz' => $festnetz, 'Mobilfunk' => $mobilfunknetz, 'SMS' => $sms, 'Mailbox' => $mailboxabfrage, 'Name' => $tarif['name']); // Weiß nicht, ob es wirklich Name heißt }
Und jetzt kannst du auch meine Methode anwenden:PHP
Alles anzeigen$tarife = array(); while(($f = mysql_fetch_assoc($result)) !== false) $tarife[] = tarifKosten($f); $k = array(); foreach($tarife as $i => $tarif) $k[$i] = $tarif['Gesamt']; asort($k); $found = 0; echo '<table cols="6"> <tr><td>Name</td><td>Gesamt</td><td>Festnetz</td><td>Mobilfunk</td><td>SMS</td><td>Mailbox</td></tr> '; $max = min(10, count($k)); $cnt = 0; foreach($k as $i => $gesamt) { if($cnt == $max) break; $tarif = $tarife[$i]; echo '<tr><td>' . $tarif['Name'] . '</td><td>' . $tarif['Gesamt'] . '</td><td>' . $tarif['Festnetz'] . '</td><td>' . $tarif['Mobilfunk'] . '</td><td>' . $tarif['SMS'] . '</td><td>' . $tarif['Mailbox'] . '</td></tr> '; echo '</table>'; }
Ist einfach nur das, was ich vorher beschrieben hatte...Viele liebe Grüße
The User