php
  • mysql
  • 2010-10-08 49 views 1 likes 
    1

    我有一個查詢拉所有文章從數據庫中..PHP/MySQL查詢在循環中,如何附加到一個查詢?

    $get_articles = $db->query(" 
        SELECT *, a.id AS id, s.type AS type FROM ".$prefix."articles a 
        LEFT JOIN ".$prefix."sources s ON (s.id = source_id) 
        WHERE a.type!='trashed' ORDER BY a.timestamp DESC LIMIT $start, $end"); 
    

    在此查詢的循環,我不那麼做同桌另一個查詢找到相關文章的「標題」該文章存儲爲'$ related_phrase'。循環內的查詢是:

    // get related articles to this entry 
    $get_related = $db->query(" 
        SELECT *, a.id AS id, MATCH (title, description) AGAINST ('$related_phrase') AS score FROM ".$prefix."articles a 
        LEFT JOIN ".$prefix."sources s ON (s.id = source_id) WHERE a.type!='trashed' AND MATCH (title, description) AGAINST ('$related_phrase') AND a.id!='$articles[id]' HAVING score > 7 
        ORDER BY a.timestamp DESC LIMIT 0, 3"); 
    

    這基本上意味着我們有一個查詢導致頁面加載非常緩慢的循環。

    我們想要做的是在主查詢中從循環中引入查詢,因此如果可能的話,它在一個查詢中都起作用了?

    非常感謝任何幫助!

    回答

    0

    我不認爲你會通過合併兩個查詢來獲得更多的速度。

    你可以嘗試的一件事是獲取所有文章和DISTINCT搜索短語(例如,可試用)的列表,然後構建一個查詢以獲取所有相關文章。最後將相關文章與文章列表進行匹配。

    0

    試試這個:

    $articles_and_related = $db->query(" 
        SELECT * 
        FROM ".$prefix."articles art 
        LEFT JOIN (
           SELECT * FROM ".$prefix."articles x 
           WHERE 
           score > 7 
           AND x.type != 'trashed' 
           AND x.id != art.id 
           AND MATCH(x.title, x.description) AGAINST (art.title) 
           LIMIT 3 
        ) rel 
        LEFT JOIN ".$prefix."sources s2 ON (s2.id = rel.source_id) 
        LEFT JOIN ".$prefix."sources s ON (s.id = art.source_id) 
        WHERE 
         art.type!='trashed' 
        ORDER BY art.timestamp DESC LIMIT $start, $end"); 
    
    相關問題