Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从db_查询结果中排除未发布的节点?_Mysql_Sql_Drupal_Drupal 7 - Fatal编程技术网

Mysql 如何从db_查询结果中排除未发布的节点?

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' =&

如何通过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' => '%%' . $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