Re: Ist hier eine Optimierung mit hash möglich ? - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 

 Alle Einträge zum Thema: Zur Liste 
    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 ?

       get $dbname;
       while(get_next $dbname)
       {
         $amounts{$Lektion}{$richtig}++;
       }
      
       for my $x (%amounts)  {    for my $y {%$amounts{$x})    {      out "$x, $y: $amounts{$x}{$y}<br>";    }  }

      Nicht getestet ,-)

     Antworten

    Beitrag von mk (966 Beiträge) am Mittwoch, 14.März.2007, 12:19.
    Re: Ist hier eine Optimierung mit hash möglich ?

      da ist noch ein Syntax Fehler drin, auch nachdem ich bei
      for my $y {%$amounts{$x})
      
      die letzte Klammer geändert habe.

      Michael

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Mittwoch, 14.März.2007, 12:50.
    Re: Ist hier eine Optimierung mit hash möglich ?

      Klammern bei Funktionen immer rund, am Anfang und Ende der Parameterliste - also so:
      for my $y ( %$amounts{$x})
      

     Antworten

    Beitrag von mk (966 Beiträge) am Mittwoch, 14.März.2007, 13:08.
    Re: Ist hier eine Optimierung mit hash möglich ?

      hatte ich auch schon versucht, klappt immer noch nicht
      hiermit:
      <perl>
      $dbrichtig="richtig";
      get $dbrichtig;
      while(get_next $dbrichtig)
       {
         $amounts{$Lektion}{$richtig}++; 
      }
      for my $x (%amounts)
       {
         for my $y (%$amounts{$x})
         {   
      out "$x, $y: $amounts{$x}{$y}<br>";
         }
      }
      </perl>
      
      [ Fehler: Fehlerhafter Perl Code in :
      syntax error at (eval 66) line 10, near "$amounts{" ]

     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

      get $dbname; 
      
      %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 ?

      Pro Lektion gibt es nur eine Frage? oder egal welches Frage beantwortet wird der counter für lektion wird hochgezählt oder wie? Eine lektion und name taucht niemals doppelt auf? mir Fehlt da noch irgendwas welche Frage was war sonnst kann er beim 2. mal die gleiche Frage beantworten doch nicht den counter hochzählen. Oder zählt das unter unwichtig?

      Also in der Datenbank etwa sowas:
      name |Lektion |richtig
      hans |1 |3
      hans |1 |3
      hans |1 |2
      hans |1 |4
      hans |2 |4
      hans |2 |1

      gewünschte Ausgabe:
       
      Lektion 1 1mal richtig 0
      Lektion 1 2mal richtig 1
      Lektion 1 3mal richtig 2
      Lektion 1 4mal richtig 1
      Lektion 1 5mal richtig 0 (wie lange soll das denn so weiter gehen? mir gefählt die Ausgabe nicht, aber das muss sie auch nicht)


      @summe;
      while(get_next($dbname)){
         $summe[$Lektion][$richtig]++;
         $maxrichtig=$richtig if $maxrichtig<$richtig;
       }
      foreach $x (1..5){ #lektionen
      foreach $y (1..$maxrichtig){ #richtig
        out "Lektion $x $y mal richtige: ".($summe[$x][$y]||0)."<br>";  
      }
      }
      

      man beachte das es sich hierbei jetzt nicht mehr um ein hash handelt sondern nen array, aber wenn du leere Einträge aufüllen möchtest ist es so einfacher.

     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.

      @Claus
      
      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 ?

      @Pouraga
      
      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


     
 Liste der Einträge von 14251 bis 14401:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.09s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!