Уменьшить количество запросов к базе, выбор с несколько таблиц одним запросом?

Статус
В этой теме нельзя размещать новые ответы.

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Сразу к сути, использую полнотекстовый поиск по таблице dle_post
PHP:
////////1 запрос
$sql = $db->query( "SELECT *, MATCH title AGAINST ('$search' IN BOOLEAN MODE) as relev FROM dle_post WHERE MATCH title AGAINST ('$search') >0 ORDER BY relev DESC LIMIT 10");
потом прохожу циклом и создаю массив с нужной мне информацией о статьи
PHP:
while($row = $db->get_row()) {
 $result[] =  array('title' => $row['title'],
    'id_news' => $row['id'],
     'add_date' => date('d-m-Y', $date),
    'category' =>     $row['tags'],
    'descriptions' => $full,
    'images' => $images,
    'info_torrent' => null);
}
}
сейчас нужно узнать информацию о файле, снова цикл по таблице dle_files и добавления инфы к массиву
PHP:
$stack_result = array ();
foreach ($result as $key => $value){
$news_id = $value["id_news"];   
////////10 запросов
    $tr = $db->super_query("SELECT f.id,f.torrent_size,f.md5,f.sha1, f.name,f.onserver, HEX(f.info_hash) AS info_hash, f.size, f.leechers, f.seeders, f.completed, f.gold, f.check, SUM(m.leechers) AS m_leechers, SUM(m.seeders) AS m_seeders, SUM(m.completed) AS m_completed FROM dle_files as f LEFT JOIN dle_tracker_multitracker as m ON (f.id=m.fid) WHERE f.news_id='{$news_id}' AND f.onserver LIKE '%.torrent' GROUP BY f.id ORDER BY f.id DESC");

    if($tr['id']) {
////////10 запросов
  $m_tr = $db->query("SELECT link FROM dle_tracker_multitracker WHERE fid='{$tr['id']}' ORDER BY id ASC");
            while ($mt = $db->get_row($m_tr)) {
            $trackers[] = $mt['link'];
            }
    $magnet_link = makeMagnetLink($tr['info_hash'],$tr['name'],$tr['size'],$trackers);


$result = array(
    'size_file' => $tr_size,
    'name_tor' => $name_tor,
    'download' => $download_url,
    'magnet_link' => $magnet_link,
    'torrent_all_leechers' => $torrent_all_leechers,
    'torrent_all_seeders' => $torrent_all_seeders,
    'torrent_all_completed' => $torrent_all_completed,
    'torrent_size' => $size, 
    'md5' => $md5,
    'sha1' => $sha1,
    
);   
}

 $value["info_torrent"] = $result;
   
    array_push($stack_result,$value);
}
В средним обработка занимает 30сек, как оптимизировать или уменьшить количество запросов к базе?
 
вот пример одного запроса
Screenshot_28.png
PHP:
SELECT * FROM users
LEFT JOIN users_email ON users_email.user_id = users.id
LEFT JOIN users_home_number ON users_home_number.user_id = users.id
LEFT JOIN users_mobile_number ON users_mobile_number.user_id = users.id
LEFT JOIN users_work_number ON users_work_number.user_id = users.id
//И еще, писать SELECT * крайне не рекомендуется. Указывайте те поля, которые нужны
как применить мне его к
PHP:
$sql = $db->query( "SELECT *, MATCH title AGAINST ('$search' IN BOOLEAN MODE) as relev FROM dle_post WHERE MATCH title AGAINST ('$search') >0 ORDER BY relev DESC LIMIT 10");
 
разобрался, что то типа:)
PHP:
$sql = $db->query( "SELECT dle_post.id,dle_post.title, MATCH title AGAINST ('$search' IN BOOLEAN MODE) as relev FROM dle_post LEFT JOIN dle_files ON dle_files.news_id = dle_post.id WHERE MATCH title AGAINST ('$search') >0 ORDER BY relev DESC LIMIT 10");
 
  • Заблокирован
  • #4
Что делает этот БУЛЕВЫЙ РЕЖИМ, может кто-нибудь, пожалуйста, просветите меня
 
Что делает этот БУЛЕВЫЙ РЕЖИМ, может кто-нибудь, пожалуйста, просветите меня
Возможности искать по части слова,выбрать головное слово и т.д,посмотри в документации
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху