Mysql 如何从db_查询结果中排除未发布的节点?
如何通过db\U查询排除未发布的节点Mysql 如何从db_查询结果中排除未发布的节点?,mysql,sql,drupal,drupal-7,Mysql,Sql,Drupal,Drupal 7,如何通过db\U查询排除未发布的节点 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' =&
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;
}
我想他们被定义为
SELECT * FROM `node` WHERE status = '1'
但是如何在下面的drupal db_查询中包含这些内容呢
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;
}
功能常见问题解答搜索查找(){
$term=strip_标记(drupal_substr($_POST['keyword'],01100));
$result=db_查询(“选择问题,nid
来自{faq_问题}
问题在哪里:术语
按问题asc排序,数组(':term'=>'%%'.$term'%%');
$string=“”;
而($row=$result->fetchObject()){
$string.=“”;
}
echo$字符串;
出口
}
searh是否可以在节点表中基于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,您将逻辑直接绑定到无法控制的数据库模式。如果将来的模块更新要改变模式,那么您将破坏需要更新的代码
虽然节点表不太可能以任何显著方式更改,但faq_问题表肯定可以更改。您最好使用
EntityFieldQuery
。是的,用EFQ替换整个查询。首先是可读性。这使它在未来更好地维护。不管怎么说,您是在实体级别上的,为什么不使用为实体级别创建的函数呢?使用EntityFieldQuery或将节点表连接到您的查询选择f.question,f.nid FROM{faq_questions}f internal join{node}n on f.nid=n.nid,其中f.question类似于:术语顺序BY f.question asc