Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Aiuto ottimizzazione query/script (php+msql)

    Ciao a tutti ,

    Da circa un anno sto scrivendo uno script per il gioco del fantacalcio, purtroppo verso la fine del campionato mi sono accorto di un problema a cui non riesco a trovare una soluzione, quindi vi chiedo consigli/aiuti per risolvere il problema del timeout.

    Cominciamo da una descrizione generale della tabella del mysql e del codice php

    Codice PHP:
    CREATE TABLE `players` (
      `
    idint(1NOT NULL auto_increment,
      `
    idplayerint(3NOT NULL default '0',
      `
    weekint(1NOT NULL default '0',
      `
    fnamevarchar(35collate latin1_general_ci NOT NULL,
      `
    teamvarchar(12collate latin1_general_ci NOT NULL,
      `
    statusint(1NOT NULL default '0',
      `
    rosterint(1NOT NULL default '0',
      `
    matches_played_markint(1NOT NULL default '0',
      `
    mark_fcdecimal(4,2NOT NULL default '0.00',
      `
    mininf25decimal(4,2NOT NULL default '0.00',
      `
    minsup25decimal(4,2NOT NULL default '0.00',
      `
    mark_gazzettadecimal(4,2NOT NULL default '0.00',
      `
    goal_scoredint(1NOT NULL default '0',
      `
    goal_againstint(1NOT NULL default '0',
      `
    goal_winint(1NOT NULL default '0',
      `
    goal_drawint(1NOT NULL default '0',
      `
    assistsint(1NOT NULL default '0',
      `
    yellowint(1NOT NULL default '0',
      `
    redint(1NOT NULL default '0',
      `
    penalty_kickint(1NOT NULL default '0',
      `
    penalty_kick_againstint(1NOT NULL default '0',
      `
    penalty_kick_catchint(1NOT NULL default '0',
      `
    penalty_kick_missint(1NOT NULL default '0',
      `
    own_goalint(1NOT NULL default '0',
      `
    matches_playedint(1NOT NULL default '0',
      `
    first_choise_playerint(1NOT NULL default '0',
      `
    noneint(1NOT NULL default '0',
      `
    homeint(1NOT NULL default '0',
      `
    valuedecimal(4,2NOT NULL default '0.00',
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 AUTO_INCREMENT=22762 

    lo script php è :

    Codice PHP:
        $result_stats mysql_query("SELECT * FROM ".$_CONF['tprefix']."players WHERE roster = '$roster' ");
        if(!
    $result_stats) { echo mysql_errno().": ".mysql_error()."
    "
    ; }
        
    $statcount mysql_numrows($result_stats);
        
    $sc 0;
        
    $p_array = Array();
        while(
    $sc $statcount) {
            
    $playerid mysql_result($result_stats,$sc,"idplayer");
            
    $p_array[$playerid][pid] = $playerid;

            
    $p_array[$playerid][fname] = mysql_result($result_stats,$sc,"fname");
            
    $p_array[$playerid][matches_played_mark] = mysql_result($result_stats,$sc,"matches_played_mark");
            
    $p_array[$playerid][team] = mysql_result($result_stats,$sc,"team");
            
    $p_array[$playerid][mark_fc] = mysql_result($result_stats,$sc,"mark_fc");
            
    $p_array[$playerid][mark_gazzetta] = mysql_result($result_stats,$sc,"mark_gazzetta");
           
    $p_array[$playerid][value] = mysql_result($result_stats,$sc,"value");

            
    $p_array[$playerid][goal_scored] = $p_array[$playerid][goal_scored] + mysql_result($result_stats,$sc,"goal_scored");
            
    $p_array[$playerid][goal_against] = $p_array[$playerid][goal_against] + mysql_result($result_stats,$sc,"goal_against");
            
    $p_array[$playerid][goal_win] = $p_array[$playerid][goal_win] + mysql_result($result_stats,$sc,"goal_win");
            
    $p_array[$playerid][goal_draw] = $p_array[$playerid][goal_draw] + mysql_result($result_stats,$sc,"goal_draw");
            
    $p_array[$playerid][assist] = $p_array[$playerid][assists] + mysql_result($result_stats,$sc,"assists");
            
    $p_array[$playerid][yellow] = $p_array[$playerid][yellow] + mysql_result($result_stats,$sc,"yellow");
            
    $p_array[$playerid][red] = $p_array[$playerid][red] + mysql_result($result_stats,$sc,"red");
            
    $p_array[$playerid][penalty_kick] = $p_array[$playerid][penalty_kick] + mysql_result($result_stats,$sc,"penalty_kick");
            
    $p_array[$playerid][penalty_kick_against] = $p_array[$playerid][penalty_kick_against] + mysql_result($result_stats,$sc,"penalty_kick_against");
            
    $p_array[$playerid][penalty_kick_catch] = $p_array[$playerid][penalty_kick_catch] + mysql_result($result_stats,$sc,"penalty_kick_catch");
            
    $p_array[$playerid][penalty_kick_miss] = $p_array[$playerid][penalty_kick_miss] + mysql_result($result_stats,$sc,"penalty_kick_miss");
            
    $p_array[$playerid][own_goal] = $p_array[$playerid][own_goal] + mysql_result($result_stats,$sc,"own_goal");
            
    $p_array[$playerid][matches_played] = $p_array[$playerid][matches_played] + mysql_result($result_stats,$sc,"matches_played");
            
    $p_array[$playerid][first_choise_player] = $p_array[$playerid][first_choise_player] + mysql_result($result_stats,$sc,"first_choise_player");

            
    $sc++;
        } 

    Piccola spiegazione:
    La tabella contiene i dati di ogni giocatore per singola giornata (totale 38 giornate) (campioanto 2007 --> 22.759 record ..). Lo script non fa altro che raccogliere le informazione per ogni giocatore e creare una classifica in base al campo che si desidera.

    Il problema è che in queta maniera lo script mi và in timeout ... alcuni esempio

    portieri : Tempo di esecuzione: 2.20216 secondi
    difensori : Maximum execution time of 60
    centrocampisti : Maximum execution time of 60 seconds exceeded
    attaccanti : Tempo di esecuzione: 8.34646 secondi .

    Spero di aver detto tutto .. qualcuno mi puo dare delle idee o consiglio come migliorare la situazione ..

    ciao a tutti e GRAZIE

  2. #2
    definisci index roster
    Tremal-Naik
    ******************************
    passa a LINUX
    **********
    la religione e' il freno che impedisce al povero di ammazzare il ricco

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    perchè non usi mysql_fetch_assoc?

    poi potresti già sommare i dati nella query
    tipo select idplayer,max(fname) fname ,max(matches_played_mark) matches_played_mark, .....,sum(goal_scored) goal_scored,sum(goal_against) goal_against, ........
    from ".$_CONF['tprefix']."players WHERE roster = '$roster' group by idplayer

    poi comunque inserisci un indice come ti hanno suggerito sempre che non sia un campo che può valere tipo solo 0 o 1

  4. #4
    Originariamente inviato da tremalnaik_sal
    definisci index roster
    Inserito ho c'e stato nessun effetto

  5. #5
    Originariamente inviato da stabi
    poi comunque inserisci un indice come ti hanno suggerito sempre che non sia un campo che può valere tipo solo 0 o 1
    Il campo roster puo valere 0,1,2,3

  6. #6
    Originariamente inviato da stabi
    poi potresti già sommare i dati nella query
    tipo select idplayer,max(fname) fname ,max(matches_played_mark) matches_played_mark, .....,sum(goal_scored) goal_scored,sum(goal_against) goal_against, ........
    from ".$_CONF['tprefix']."players WHERE roster = '$roster' group by idplayer
    Scusa ma sei sicuro di usare "group by idplayer" ?

  7. #7
    Originariamente inviato da stabi
    perchè non usi mysql_fetch_assoc?
    Risolto tutto .. usando mysql_fetch_assoc .. velocità sotto il secondo

    ciao e grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.