2014-02-21 210 views
0

我使用下面的PHP'和'MySQL的代碼,列出從我的數據庫最近的話題,並在下面列出每個這些標題的相關主題的書籍......MySQL:查詢另一個查詢結果並返回兩個結果?

// First Query 
$query= mysql_query("SELECT * FROM my_table ORDER BY id DESC limit 0,20"); 
$result = mysql_query($query) 

while($row = mysql_fetch_array($result)){ 
echo "Main Topic: ".$row['title']; 
$main_title = $row['title']; 
    echo "Related to this Topic:"; 

    // Second Query 
    $related_query= mysql_query(" 
    SELECT * MATCH (title) 
    AGAINST('$main_title'IN NATURAL LANGUAGE MODE)AS 
    score FROM my_table MATCH(title) AGAINST('$main_title'IN NATURAL LANGUAGE MODE) 
    HAVING score > 10 ORDER BY score DESC 
    "); 
    $related_result = mysql_query($related_query) 

      while($related_row = mysql_fetch_array($related_result)){ 
      echo "<br>". $related_row['title']; 
    } 


} 

這工作得很好。但問題是它在循環中使用MySQL查詢。 (第二個查詢運行20次)我讀過它不是一個好的編程習慣,因爲它大量使用服務器資源。

那麼,有沒有辦法做到這一點只有一個查詢或兩個查詢,而無需在循環內運行查詢?

謝謝

+0

你不能存儲在一個陣列中的所有$ main_titles,然後在第二個查詢所有的$ main_titles陣列中使用的「IN」操作? – costa

+0

@costa在這種情況下,有兩個問題。1.我可以在全文搜索中使用IN操作嗎? 2.如果我使用IN操作,它將返回所有與所有主標題相關的行作爲批量。但我希望每個主標題SEPARATELY .. – nidahasa

回答

0

首先,請停止使用mysql_*()功能。它們已被棄用多年。其次,一旦開始使用合理的數據庫接口(如PDO或甚至只是mysqli),就可以執行準備好的查詢。查詢可以在循環外部準備,這將節省資源並減少所花費的時間。

第三,這可以用一個查詢來完成,但是需要將數據庫結構發佈爲確定的。

編輯:這裏的一些未經測試的PDO代碼:

<?php 
try { 
    $db = new PDO("mysql:host=localhost;dbname=my_database", "user", "pass"); 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
    exit; 
} 

$result = $db->query("SELECT * FROM my_table ORDER BY id DESC LIMIT 20"); 
$result->setFetchMode(PDO::FETCH_ASSOC); 

$stmt = $db->prepare("SELECT * MATCH (title) AGAINST (? IN NATURAL LANGUAGE MODE) AS score FROM my_table MATCH (title) AGAINST (? IN NATURAL LANGUAGE MODE) HAVING score > 10 ORDER BY score DESC"); 

while ($row = $result->fetch()) { 
    echo "Main Topic: $row[title]"; 
    $params = array($row["title"], $row["title"]); 
    $result2 = $stmt->execute($params); 
    $result2->setFetchMode(PDO::FETCH_ASSOC); 
    while ($row2 = $result2->fetch()) { 
     echo "<br>$row2[title]"; 
    } 
} 
+0

的相關標題..我會嘗試一下,讓你知道...我是全新的PDO,所以我必須先學習基礎知識..反正哪個更好:PDO或MySQLi? – nidahasa

+0

對於準備查詢之類的事情,我發現PDO更直觀。在上面的示例中,使用mysqli,必須將參數變量綁定到查詢,並指定它們是字符串還是整數,然後在使用它之前將另一組變量綁定到結果集。 PDO是一個數據庫抽象層,並且帶走了很多低級別的東西。此外,PDO與數據庫無關,所以如果您更改爲Postgres或Oracle,則不需要更改代碼。 – miken32

相關問題