gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:39:00 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com