Beitrag von mk (966 Beiträge) am Montag, 12.März.2007, 19:58.
Ist hier eine Optimierung mit hash möglich ?
Hallo,
ich habe zwar schon so einiges hier über und mit hash gelesen, aber nicht verstanden.
Ich möchte eine Statistikseite mit vielen Auswertungen ausgeben.
Derzeit frage ich jeden Wert mit einer get Abfrage ab.
Das dauert aber zu lange, wenn ich alles auswerten lasse.
So mache ich es:
get "Lektion==1 range=0,1", "$dbname";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "1", "&", "name", "==", "$namerein", "&", "Lektion", "==", "1"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "2", "&", "name", "==", "$namerein", "&", "Lektion", "==", "1"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "3", "&", "name", "==", "$namerein", "&", "Lektion", "==", "1"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "4", "&", "name", "==", "$namerein", "&", "Lektion", "==", "1"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
out "</tr><tr><td><b>Lektion 2</b></td>";
get "Lektion==2 range=0,1", "$dbname";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "1", "&", "name", "==", "$namerein", "&", "Lektion", "==", "2"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "2", "&", "name", "==", "$namerein", "&", "Lektion", "==", "2"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "3", "&", "name", "==", "$namerein", "&", "Lektion", "==", "2"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
get ["richtig", "==", "4", "&", "name", "==", "$namerein", "&", "Lektion", "==", "2"], "$dbrichtig";
out "<td align='center'>$_amount_query</td>";
Dies dauert 0,32 s
Hat einer ne schnellerer Lösung?
Wer nicht helfen will, braucht dies hier nicht zu schreiben.
Danke
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 12.März.2007, 21:52.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 14.März.2007, 12:19.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 14.März.2007, 12:50.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 14.März.2007, 13:08.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von richard (1187 Beiträge) am Donnerstag, 15.März.2007, 07:54. WWW: posaunenchor-rhoden.de
Re: Ist hier eine Optimierung mit hash möglich ?
Also, ich würde das mit ganz "normalen" Zählvariablen machen, das reduziert die Datenbankabfragen per get auch. Sehe ohnehin nicht so ganz, wie der bisherige Code das leisten soll, vieleicht habe ich Dich aber auch falsch verstanden.
$anzahllektion1=0; $anzahllektion2=0; $anzahllektion3=0; $anzahllektion4=0;
get $dbname;
while(get_next $dbname) {
if ($Lektion==1) { $anzahllektion1++; }
if ($Lektion==2) { $anzahllektion2++; }
if ($Lektion==3) { $anzahllektion3++; }
if ($Lektion==4) { $anzahllektion4++; }
}
Das sollte die Anzahl der Einträge nach Lektion = 1-4 in $dbname ermitteln (Deine ersten beiden Zeilen), was dann an beliebiger Stelle ausgegeben werden könnte.
Dann weiter (für Lektion 1 und 2):
$lekt1_summeri1 = 0; $lekt1_summeri2 = 0; $lekt1_summeri3 = 0; $lekt1_summeri4 = 0;
$lekt2_summeri1 = 0; $lekt2_summeri2 = 0; $lekt2_summeri3 = 0; $lekt2_summeri4 = 0;
get ["name","==","$namerein"],"$dbrichtig";
while(get_next $dbrichtig) {
if ($Lektion == 1 & $richtig == 1) { $lekt1_summeri1++; }
if ($Lektion == 1 & $richtig == 2) { $lekt1_summeri2++; }
if ($Lektion == 1 & $richtig == 3) { $lekt1_summeri3++; }
if ($Lektion == 1 & $richtig == 4) { $lekt1_summeri4++; }
if ($Lektion == 2 & $richtig == 1) { $lekt2_summeri1++; }
if ($Lektion == 2 & $richtig == 2) { $lekt2_summeri2++; }
if ($Lektion == 2 & $richtig == 3) { $lekt2_summeri3++; }
if ($Lektion == 2 & $richtig == 4) { $lekt2_summeri4++; }
}
out "alle benötigtn Variabeln";
Antworten
Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 15.März.2007, 10:52.
Re: Ist hier eine Optimierung mit hash möglich ?
Er möchte es doch nicht mit Skalaren lösen sondern mit einem Hash, und so wie ich das sehe ist das auch die vollkommen richtige Idee.
Aber ich blicke da nicht so recht durch was du überhaupt zusammenzählen möchtest. Wie währe es mit einem Beispiel. Inhalt der DB -> gewünschte Ausgabe
for my $x (%amounts) {
for my $y {%$amounts{$x}){
Das wird perl nich verstehen, besser:
foreach my $x (keys %amounts) {
foreach my $y {keys %$amounts{$x}){
Geraten: Wenn eine Frage richtig beantwortet wurde dann wird die Nummer der Frage und die Nummer der Lektion in die db geschrieben? Und du möchtest jetzt eine Auflistung haben wie viele richtige pro lektion waren? (welche Fragen es jetzt jeweils richtig waren ist egal?)
quick
%sum;
while(get_next $dbname){
$sum{$Lektion}++;
}
foreach sort(keys %sum){
out "$sum{$_} richtige in Lektion $_";
}
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 15.März.2007, 12:31.
Re: Ist hier eine Optimierung mit hash möglich ?
Jetzt beschreibe ich mal was passiert,
Die Datenbank hat die Felder:
-name
-Lektion
-richtig
-und anderes dies spielt hier aber keine Rolle
Wenn nun die Frage richtig beantwort wurde, wird ein Datensatz mit name, Lektion und richtig mit dem Wert 1 abgespeichert.
Wenn die gleiche Frage noch mal kommt und auch richtig beantwortet wird, wird der Wert von richtig auf 2 gesetzt.
So kan es immer weitergehen.
Da kommen dan ganz schön viele Datensätze zusammen.
Bei Spanisch sind dies schon über 20.000
Jetzt werte ich aus,
wieviel Antworten hat Max von der Lektion 1 schon 1x richtig
usw.
Dies mache ich derzeit für nur 4 Lektionen und bis 4x richtig.
Ich brauche dafür dann 16 verschiedene get Abfragen.
Dies funktioniert auch, ist auf der Dauer für den Server nicht gut.
Meine Version ist hier zu finden wenn du dich registrierst:
http://kochhome.de/baseportal/vokabeltrainer/spanisch/vokabeltrainer_sp
Die "Lektion Test" ist ganz einfach.
Mutter - madre
Vater - padre
Viel spaß
Michael
Antworten
Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 15.März.2007, 22:17.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 16.März.2007, 14:49.
Re: Ist hier eine Optimierung mit hash möglich ?
hab erstmal den Code 1:1 übernommen (natürlich mit perl eingerahmt)
es kommt aber wieder ein Fehler:
[ Fehler: Kann /usr/local/httpd/baseportal/ko/ch/kochhome.de/vokabeltrainer/spanisch/test3.fields nicht öffnen ]
Es sind Vokabellektionen, somit gibt es pro Lektion mehrere Vokabeln die abgefragt werden.
Ich weis nicht, wie es es noch beschreiben soll,
wenn wenigstenens ein Code mal eine richtige Syntax hätte, dann könnte ich wenigstesns sagen was am Ergebnis falsch oder richtig ist.
Michael
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 16.März.2007, 16:35. WWW: hummelexpress.de
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 16.März.2007, 19:18. WWW: vokabeltrainer-online.net
Re: Ist hier eine Optimierung mit hash möglich ?
Hallo,
@Pouraga
das was du schreibst habe ich alles versucht, dass das get fehlte hatte ich gemerkt und nachgetragen, da ich die Funktionen noch nie benutzt habe und auch bei Anleitungen da nicht durchblickte habe ich hier um Hilge gesucht,
die Codes von dir und cb gingen leider nicht.
du bist mit deinem Beispiel ganz dicht an meinen Wünschen, es fehlt nur noch eine weitere Untergliederung.
Beispiel:
bei VW wieviel Golf und Passat gibt es.
Aber vielleicht verstehe ich deinen funktionierenden Code und kann ihn selber erweitern.
Michael
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 16.März.2007, 19:31. WWW: hummelexpress.de
Re: Ist hier eine Optimierung mit hash möglich ?
Dann schau mal genau bei Hamburg hin;-)
VW 1
VW Golf 1
Gruß
Claus
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 16.März.2007, 19:39.
Re: Ist hier eine Optimierung mit hash möglich ?
nee
richtig wäre:
Typ: VW
Marke: Golf
und nicht:
Typ: VW Golf
Das Feld "Marke" hat du noch nicht.
Michael
Antworten
Beitrag von Pouraga (1396 Beiträge) am Samstag, 17.März.2007, 14:35.
Re: Ist hier eine Optimierung mit hash möglich ?
Antworten
Beitrag von mk (966 Beiträge) am Samstag, 17.März.2007, 15:34.
Re: Ist hier eine Optimierung mit hash möglich ? geschaft
ich bitte um Entschuldigung, lag wohl an mir.
Dies geht und ist bedeutend schneller als meine Erste Lösung.
Michael
Antworten
Beitrag von Pouraga (1396 Beiträge) am Freitag, 16.März.2007, 17:14.
Re: Ist hier eine Optimierung mit hash möglich ?
Wir können hier echt schlecht die syntax debuggen, das musst du schon selber machen. Teile rausnehmen die du vermutest die es sind und ein wenig herumprobieren im schlimmsten fall mal die Zeilen zählen. Und vorallem aufmerksamm die Fehlermeldung lesen.
test3.fields nicht öffnen, er versucht da eine Datenbank zu öffnen die es nicht gibt. Hast du überall die richtige Datenbank (in meinen letzten beispiel war noch nichtmal mehr das get drin, das gehört natürlich dazu und wir auch diesen Fehler verurschen)
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 15.März.2007, 18:37. WWW: vokabeltrainer-online.net
Re: Ist hier eine Optimierung mit hash möglich ?
Danke,
ich habe jetzt deinen letzten Code versucht,
es kommt aber dieser Fehler:
[ Fehler: Fehlerhafter Perl Code in :
Missing $ on loop variable at (eval 49) line 8. ]
was ist das?
Michael
Antworten
Beitrag von richard (1187 Beiträge) am Mittwoch, 14.März.2007, 07:16. WWW: posaunenchor-rhoden.de
Re: Ist hier eine Optimierung mit hash möglich ?
Klappt das mit dem Vorschlag von Christoph?
Ansonsten würde ich das Ganze erst einmal mit "einfachen" Variabeln bauen
Antworten