Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите оптимизировать запрос
 
 автор: ganelena   (22.05.2006 в 13:06)   письмо автору
 
 

SELECT themes.id_theme, themes.id_doska, themes.cat, themes.id_mode,  themes.time, mode.page, posts.name FROM themes, mode, posts WHERE themes.hide != 'hide' AND mode.id_mode=themes.id_mode AND posts.id_theme=themes.id_theme ORDER BY themes.time DESC


Хост заблокировали

Причина - превышен лимит подключений к базе данных.
Возможно необходимо использовать функцию mysql_close()
после выполнения запросов, т.е. отключаться от базы в
скрипте сайта.

   
 
 автор: Trianon   (22.05.2006 в 13:14)   письмо автору
 
   для: ganelena   (22.05.2006 в 13:06)
 

Проблема, вероятно, не в самом запросе, а в php-скриптах, которые подключаются к базе. И в том, сколь часто они выполняют функцию mysql_select_db.
В запросе ничего криминального нет.

   
 
 автор: ganelena   (22.05.2006 в 13:23)   письмо автору
 
   для: Trianon   (22.05.2006 в 13:14)
 


<?php 
require_once('Connections/car.php'); ?>
<?php
$show
='no';
$maxRows_Recordset1 10;
$pageNum_Recordset1 0;
if (isset(
$_GET['pageNum_Recordset1'])) {
  
$pageNum_Recordset1 $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 $pageNum_Recordset1 $maxRows_Recordset1;

mysql_select_db($database_car$car);
$query_Recordset1 "SELECT * FROM doski";
$query_limit_Recordset1 sprintf("%s LIMIT %d, %d"$query_Recordset1$startRow_Recordset1$maxRows_Recordset1);
$Recordset1 mysql_query($query_limit_Recordset1$car) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);

if (isset(
$_GET['totalRows_Recordset1'])) {
  
$totalRows_Recordset1 $_GET['totalRows_Recordset1'];
} else {
  
$all_Recordset1 mysql_query($query_Recordset1);
  
$totalRows_Recordset1 mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$maxRows_Recordset2 20;
$pageNum_Recordset2 0;
if (isset(
$_GET['pageNum_Recordset2'])) {
  
$pageNum_Recordset2 $_GET['pageNum_Recordset2'];
}
$startRow_Recordset2 $pageNum_Recordset2 $maxRows_Recordset2;

mysql_select_db($database_car$car);
$query_Recordset2 "SELECT themes.id_theme, themes.id_doska, themes.cat, themes.id_mode,  themes.time, mode.page, posts.name FROM themes, mode, posts WHERE themes.hide != 'hide' AND mode.id_mode=themes.id_mode AND posts.id_theme=themes.id_theme ORDER BY themes.time DESC";
$query_limit_Recordset2 sprintf("%s LIMIT %d, %d"$query_Recordset2$startRow_Recordset2$maxRows_Recordset2);
$Recordset2 mysql_query($query_limit_Recordset2$car) or die(mysql_error());
$row_Recordset2 mysql_fetch_assoc($Recordset2);

if (isset(
$_GET['totalRows_Recordset2'])) {
  
$totalRows_Recordset2 $_GET['totalRows_Recordset2'];
} else {
  
$all_Recordset2 mysql_query($query_Recordset2);
  
$totalRows_Recordset2 mysql_num_rows($all_Recordset2);
}
$totalPages_Recordset2 ceil($totalRows_Recordset2/$maxRows_Recordset2)-1;

mysql_select_db($database_car$car);
$query_Recordset3 "SELECT mode.id_mode, mode, count(*) as count, page, noz FROM mode JOIN themes ON mode.id_mode=themes.id_mode AND themes.id_doska='2' AND themes.hide != 'hide' GROUP BY mode.id_mode ORDER BY mode.noz ASC,  mode.mode ASC";
$Recordset3 mysql_query($query_Recordset3$car) or die(mysql_error());
$row_Recordset3 mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 mysql_num_rows($Recordset3);




Я так понимаю три раза

   
 
 автор: Trianon   (22.05.2006 в 13:31)   письмо автору
 
   для: ganelena   (22.05.2006 в 13:23)
 

Что мешает удалить вызов mysql_select_db($database_car, $car); из всех трех мест и поместить его один раз в Connections/car.php ?

   
 
 автор: ganelena   (22.05.2006 в 13:38)   письмо автору
 
   для: Trianon   (22.05.2006 в 13:31)
 

Спасибо я уже сделала

а как мне закрыть соединение
mysql_close()


$car = mysql_pconnect($hostname_car, $username_car, $password_car) or die(mysql_error());

Если такое соединение?
Что надо написать в скобках?

   
 
 автор: Trianon   (22.05.2006 в 13:45)   письмо автору
 
   для: ganelena   (22.05.2006 в 13:38)
 

Для начала замените mysql_pconnect на mysql_connect. Этот вызов и являлся причиной отключения Вашего хоста.
mysql_close можете вообще не писать. В конце выполнения скрипта php-интерпретатор закроет соединение сам. Если оно, конечно, открыто через mysql_connect , а не через mysql_pconnect .

   
 
 автор: ganelena   (22.05.2006 в 13:48)   письмо автору
 
   для: Trianon   (22.05.2006 в 13:45)
 

Спасибо, а в чем разница?

   
 
 автор: Trianon   (22.05.2006 в 13:53)   письмо автору
 
   для: ganelena   (22.05.2006 в 13:48)
 

В первую очередь именно в этом. mysql_pconnect создает соединения, которые не закрываются автоматически по завершении скрипта.

   
 
 автор: ganelena   (22.05.2006 в 13:54)   письмо автору
 
   для: Trianon   (22.05.2006 в 13:53)
 

Спасибо,
А есть какие либо количественные методы определения загружаемости сервера?

   
 
 автор: cheops   (22.05.2006 в 16:11)   письмо автору
 
   для: ganelena   (22.05.2006 в 13:54)
 

Потребляемый объём памяти и процентная загрузка процессора.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования