我正在使用以下“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/