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

Тема в разделе "Базы данных", создана пользователем usergeyv, 3 июл 2019.

Статус темы:
Закрыта.
Модераторы: latteo
  1. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    143
    Симпатии:
    22
    Сразу к сути, использую полнотекстовый поиск по таблице 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сек, как оптимизировать или уменьшить количество запросов к базе?
     
  2. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    143
    Симпатии:
    22
    вот пример одного запроса
    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");
     
  3. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    143
    Симпатии:
    22
    разобрался, что то типа:)
    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. Khan Lala

    Khan Lala Писатель Нарушитель

    Заблокирован
    Регистр.:
    5 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    Что делает этот БУЛЕВЫЙ РЕЖИМ, может кто-нибудь, пожалуйста, просветите меня
     
  5. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    143
    Симпатии:
    22
    Возможности искать по части слова,выбрать головное слово и т.д,посмотри в документации
     
Статус темы:
Закрыта.