gpt4 book ai didi

mysql - 如何从 db_query 结果中排除未发布的节点?

转载 作者:行者123 更新时间:2023-11-29 05:55:41 26 4
gpt4 key购买 nike

如何通过db_query排除未发布的节点

我认为它们被定义为

SELECT * FROM `node` WHERE status = '1'

但是如何将其包含在下面的 drupal db_query 中?

function faq_search_find() {

$term = strip_tags(drupal_substr($_POST['keyword'], 0, 100));

$result = db_query("SELECT question, nid
FROM {faq_questions}
WHERE question LIKE :term
ORDER BY question asc", array(':term' => '%%' . $term . '%%'));
$string = "";

while ($row = $result->fetchObject()) {
$string .= "<a href='/" . drupal_get_path_alias('node/' . $row->nid) . "'>" . $row->question . "</a>";
}

echo $string;
exit;
}

是否可以根据节点表中的 nid 来组合搜索,或者更好的方法是在 while 循环中使用 Drupal 命令过滤掉它们?

感谢您的帮助。

最佳答案

您可以加入节点表,也可以按照上面的建议使用 EFQ。但这是 SQL

   $result = db_query("SELECT question, nid
FROM {faq_questions} F1
INNER JOIN {node} N1
ON F1.nid = N1.nid AND N1.status = 1
WHERE question LIKE :term
ORDER BY question asc", array(':term' => '%%' . $term . '%%'));

如果您想要一个关于为什么您应该使用 EFQ 的实际解释......虽然在通常情况下 SQL 是完成这项工作的正确工具,但实际上这不是其中之一。通过编写原始 SQL,您将逻辑直接绑定(bind)到您无法控制的数据库模式。如果 future 的模块更新要更改模式,您将破坏需要更新的代码。

虽然节点表不太可能发生任何重大变化,但 faq_questions 表肯定可以。

关于mysql - 如何从 db_query 结果中排除未发布的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655161/

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