Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть задание-
Необходимо написать скрипт, который будет собирать данные 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));
Вопрос как можно оптимизировать запрос (из за того чо количество обращении к скрипту очень большое)?
Неактивен
$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)
Неактивен
поле id является первичным ключом и находиться в естественно в прямой зависимости от datereg!
Неактивен
Спасибо!!! Так вроде разобрался в том что написали ток не могу понять как теперь мне выводить значения через при не выполнении условия printf и объясните пожалуйста зачем -
else
$tpl['users'] = $rows;
Неактивен
и записывать значения в файл тоже не хочет!
Неактивен
андрей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)
Неактивен
Всё спасибо!!!!) все заоработало
Неактивен
я так понял что если у меня ID первичное поле то сделать его индексным нельзя?
Неактивен
Первичный ключ это и есть уникальный индекс поля.
Неактивен
С правами записи в файл все ок! вот что он записывает-
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
он не может считать значения с массива!
Неактивен
А если 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)
Неактивен
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
Неактивен
Ой, mysql_fetch_row нужно поменять на mysql_fetch_assoc.
Неактивен
Ура!!!!!)И свершилось чудо!СПАСИБО ОГРОМНОЕ!!!!
Неактивен
Страниц: 1