2014-02-21 188 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

相关问题