PHP Script (Abfrage MySQL) optimieren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?
    Last edited by Laire; 06-01-2008, 05:36.

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

    /edit - sorry falsch geguckt (kann gelöscht werden)
    Last edited by lennart; 06-01-2008, 10:21.

    Comment


    • #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.

      Comment


      • #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

        Comment


        • #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?

          Comment


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

            Comment


            • #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))
              {} 

              Comment

              Working...
              X