php - MySQL:查询另一个查询结果并返回两个结果?

标签 php mysql performance

我正在使用以下“php”和“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 次)我读到这不是一个好的编程实践,因为它大量使用服务器资源。

那么,有没有一种方法只需一个或两个查询即可完成此操作,而无需在循环中运行查询?

谢谢

最佳答案

首先,停止使用 mysql_*() 函数。它们已被弃用多年。

其次,一旦您开始使用合理的数据库接口(interface)(例如 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]";
    }
}

关于php - MySQL:查询另一个查询结果并返回两个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21939655/

相关文章:

c# - 在 Fluent NHibernate 中创建数据库期间列名发生变化

performance - PostgreSQL 9.2 - Agg 查询速度慢,计数(distinct x)

PHP date_default_timezone_set() 和 time()

php - 带有 LEFT JOIN 和 GROUP 问题的 MySQL SELECT

php - NuSOAP + PHP , wsdl 错误 : XML error parsing WSDL issue

PHP echo 不工作

php - 将jstree中的数据插入数据库

java - Sql事件与Servlet中的ScheduledExecutorService

performance - Kotlin 使用运行时断言进行空值检查 - 性能开销?

c# - 如何阻止自定义性能计数器实例名称自动转换为小写