SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.02.2009 21:29:31

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Помогите пожалуйста с оптимизацией!!!!!!!!

Есть задание-
Необходимо написать скрипт, который будет собирать данные 10 последних зарегистрированных игроков (ID, логин, уровень, количество побед). Данные игроков хранятся в MySQL таблице users в полях: id, login, level, wins, datereg.
При передаче параметра GET “inside” равного «1», необходимо записать полученные данные игроков в файл last_reg.dat, в формате: «id|login|level|wins|datereg|» в порядке возрастания даты регистрации. Если же параметр ?inside=1 не был передан или его значение не «1», то список зарегистрированных игроков в порядке убывания необходимо записать в массив $tpl{“users”} и вывести структуру массива на экран.
Количество обращений к данному скрипту очень высокое, так как он подключается на главной странице игры, поэтому стоит задуматься о его оптимизации.

Вот моё решение-
$db = mysql_connect ("localhost","root","");
mysql_select_db("users1",$db);
$res = mysql_query("SELECT * FROM users ORDER BY id DESC LIMIT 10",$db);
$row1=mysql_fetch_array ($res);
$res1=mysql_query("SELECT * FROM  ( SELECT * FROM `users` ORDER BY id DESC LIMIT 10 ) as t ORDER BY  id",$db);
if($_GET['inside']=='1') { $fp = fopen ('last_reg.dat', 'a');
while ($row = mysql_fetch_array ($res1) )
{
fwrite ($fp, $row['id'].'|'.$row['login'].'|'.$row['level'].'|'.$row['wins'].'|'.$row['datereg']."\n");
}
fclose($fp); }
else
do
{
printf ("Последнии 10 зарег- %s<br>%s<br>%s<br>%s<br>%s<br><br>",$row1['id'],$row1['login'],$row1['level'],$row1['wins'],$row1['datereg']);
}
while ($row1 = mysql_fetch_array($res));
Вопрос как можно оптимизировать запрос (из за того чо количество обращении к скрипту очень большое)?

Неактивен

 

#2 17.02.2009 21:52:00

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Код:

$db = mysql_connect ("localhost","root","");
mysql_select_db("users1",$db);

$res = mysql_query('SELECT * FROM `users` ORDER BY id DESC LIMIT 10', $db);
$rows = array();
while(false!==$r=mysql_fetch_row($res))
    $rows[] = $r;
mysql_free_result($res);
if(isset($_GET['inside']) && $_GET['inside']=='1')
{
    $f = fopen('last_reg.dat', 'w');
    foreach(array_reverse($rows) as $row)
        fwrite($f, "$row[id]|$row[login]|$row[level]|$row[wins]|$row[datereg]\n");
    fclose($f);
}
else
    $tpl['users'] = $rows;

Будет работать, при условии, что поля id и datereg находятся в прямой зависимости друг от друга.
Добавить индекс по полю `id` (если это уже не первичный ключ).
+ Можно кешировать результат или делать запись в файл не при каждом запросе, а непосредственно при добавлении новой записи в базу.

Отредактированно coin (17.02.2009 21:53:49)

Неактивен

 

#3 17.02.2009 22:17:14

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

поле id является первичным ключом и находиться в естественно в прямой зависимости от datereg!

Неактивен

 

#4 17.02.2009 22:46:08

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Спасибо!!!  Так вроде разобрался в том что написали ток не могу понять как теперь мне выводить значения через при не выполнении условия printf и объясните пожалуйста зачем -
else
    $tpl['users'] = $rows;

Неактивен

 

#5 17.02.2009 22:57:46

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

и записывать значения в файл тоже не хочет!

Неактивен

 

#6 17.02.2009 23:05:30

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

андрей123 написал:

или его значение не «1», то список зарегистрированных игроков в порядке убывания необходимо записать в массив $tpl{“users”} и вывести структуру массива на экран.

Я подумал, что это переменная шаблонизатора, а вывод массива уже реализован в шаблоне..

Код:

else
    foreach($rows as $row)
        vprintf('ID: %d, Login: %s, level: %s, wins: %s, datereg: %s<br />', array_map('htmlspecialchars', $row));

андрей123 написал:

и записывать значения в файл тоже не хочет!

unix? Права на запись выставлены?

Отредактированно coin (17.02.2009 23:07:35)

Неактивен

 

#7 17.02.2009 23:36:43

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Всё спасибо!!!!) все заоработало

Неактивен

 

#8 17.02.2009 23:39:59

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

я так понял что если у меня ID первичное поле то сделать его индексным нельзя?

Неактивен

 

#9 17.02.2009 23:44:56

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Первичный ключ это и есть уникальный индекс поля.

Неактивен

 

#10 17.02.2009 23:47:03

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

С правами записи в файл все ок! вот что он записывает-
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
он не может считать значения с массива!

Неактивен

 

#11 17.02.2009 23:55:13

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

А если error_reporting(E_ALL); ?

Код:

if(isset($_GET['inside']) && $_GET['inside']=='1')
{
    $old = error_reporting(E_ALL);
    $f = fopen('last_reg.dat', 'w');
    foreach(array_reverse($rows) as $row)
        fwrite($f, "$row[id]|$row[login]|$row[level]|$row[wins]|$row[datereg]\n");
    fclose($f);
    error_reporting($old);
}

Отредактированно coin (17.02.2009 23:57:00)

Неактивен

 

#12 18.02.2009 00:00:44

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: id in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: login in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: level in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: wins in Z:\home\localhost\www\test1\index8.php on line 30

Notice: Undefined index: datereg in Z:\home\localhost\www\test1\index8.php on line 30

Неактивен

 

#13 18.02.2009 00:02:57

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Ой, mysql_fetch_row нужно поменять на mysql_fetch_assoc.

Неактивен

 

#14 18.02.2009 00:06:59

андрей123
Участник
Зарегистрирован: 17.02.2009
Сообщений: 9

Re: Помогите пожалуйста с оптимизацией!!!!!!!!

Ура!!!!!)И свершилось чудо!СПАСИБО ОГРОМНОЕ!!!!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson