PHP Script (Abfrage MySQL) optimieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Script (Abfrage MySQL) optimieren

    Hallo,

    2 Probleme:


    1.
    ich habe das Problem, das bei meinem momentanen Script das Zeitlimit von 30 Sekunden überschritten wird und das Script dann abgebrochen wird.

    Es geht um folgendes, in der Tabelle t1_cod4play sind ca. 400.000 Einträge. Davon Relevant sind die ID, der Key und eine Sekundenangabe. Ich möchte nun gerne in einer anderen Tabelle jeden Key einmal eintragen und die Sekunden aller Einträge mit diesem Key aus der anderen Tabelle addieren. Hier meine Lösung, die leider zu lange dauert :-(


    PHP-Code:
    $abfrage mysql_query 
    ("SELECT play_key, play_time FROM t1_cod4play"); 
    while(
    $row mysql_fetch_array($abfrage)) 
    {
       
    $abfrageb mysql_query 
       
    ("SELECT player_id, player_time FROM t1_cod4player WHERE player_key = '".$row[play_key]."'"); 
       
    $rowb mysql_fetch_array($abfrageb);
       
       if(
    $rowb[player_id] != '')
       {
          
    $time $row[play_time] + $rowb[player_time];
          
    mysql_query("UPDATE t1_cod4player SET `player_time` = '".$time."' WHERE player_id = '".$rowb[player_id]."'"
    OR die(
    mysql_error());
       }
       else
       {
       
    mysql_query("INSERT INTO `t1_cod4player`(`player_key`, `player_time`) VALUES ('$row[play_key]', '$row[play_time]')");
       }



    2.

    Ich möchte gerne einfach nur wisse, wieviele Einträge eine Tabelle Gesamt hat, ich habe das so gemacht:

    PHP-Code:
    $sql mysql_query("SELECT game_id FROM t1_cod4stats");
    $countges mysql_num_rows($sql); 
    Was bei bis zu 500.000 Datensätze aber auch sehr aufwändig ist. Gibt es da vielleicht auch eine bessere Art?
    Zuletzt geändert von Laire; 06.01.2008, 06:36.

  • #2
    Re: PHP Script (Abfrage MySQL) optimieren

    /edit - sorry falsch geguckt (kann gelöscht werden)
    Zuletzt geändert von lennart; 06.01.2008, 11:21.

    Kommentar


    • #3
      Hallo,

      zu 2: Probiere es doch mal mit COUNT(SPALTE) weiß zwar nicht ob das schneller geht, aber probiers mal aus.
      Wer anderen eine Grube gräbt, der hat ein Grubengrabgerät.

      Kommentar


      • #4
        • zu 1: Was soll der Unfug mit der 2. Tabelle? die Zeit hast du schon in der t1_cod4play erfasst, wenn du die Gesamtzeit einzelnen User haben willst, dann hilft dir SUM und GROUP BY gern.
        • zu 2: COUNT ist dein Freund

        Kommentar


        • #5
          zu 1

          An sich hast du recht. Aber da habe ich dann eine andere Frage:

          In der Spalte Key, kommen fast alle Keys mehrmals vor, aber ich weiß nicht welche Keys es alles gibt.

          Wie bekomme ich es jetzt hin, das ich eine Übersicht aller genutzen keys bekomme?

          Kommentar


          • #6
            Mit SELECT DISTINCT [...].
            ich glaube

            Kommentar


            • #7
              Jupp..

              habe es jetzt so gemacht, hoffe das ist peformance mäßig das optimalste:

              PHP-Code:
              $sql mysql_query("SELECT DISTINCT play_key FROM t1_cod4play") or die(mysql_error());
              while(
              $key mysql_fetch_row($sql))
              {} 

              Kommentar

              Lädt...
              X