如何编写左左右查询? -- 7 领域 和 database 领域 drupal 相关 的问题

How do I write a left join query?


7
vote

问题

中文

我想得到知道节点ID的"vid" 的值,并为"vid" 等于2的行获取"名称" 的值。

如果它是一个简单的查询,我不知道如何写它;我不知道如何编写左边的加入查询。

Drupal中的"普通" SQL查询如下:

  $result = db_query('SELECT tid FROM {taxonomy_index} WHERE nid = :nid', array(':nid'=>$nid));   

等效的原始SQL查询如下:

  SELECT did, name FROM taxonomy_index as ti LEFT JOIN taxonomy_term_data AS ttd ON ti.tid = ttd.tid WHERE vid = 2 and nid = $nid   
英文原文

I want to get the value of "vid" knowing the node ID, and get the value of "name" for those rows where "vid" is equal to 2.

If it were a plain query, I would not know how to write it; I don't know how to write a left join query.

The "plain" SQL query in Drupal is the following:

$result = db_query('SELECT tid FROM {taxonomy_index} WHERE nid = :nid', array(':nid'=>$nid)); 

The equivalent raw SQL query is the following:

SELECT did, name FROM taxonomy_index as ti LEFT JOIN taxonomy_term_data AS ttd ON ti.tid = ttd.tid WHERE vid = 2 and nid = $nid 
     

回答列表

11
 
vote
vote
最佳答案
 

您不需要使用db_select()以获取这样的静态查询。实际上,你不应该看到鉴于db_select比db_query要慢得多,为什么要使用它?。

只需要将其传递给db_query(),唯一更改的是您如何添加占位符。

  $result = db_query('select tid,name from {taxonomy_index} as ti left join {taxonomy_term_data} as ttd on ti.tid=ttd.tid where vid=2 and nid=:nid', array(':nid' => $nid)); foreach ($result as $term) {   // $term contains the object for the taxonomy term. }   

请参阅 http://drupal.org/developing/api/database 了解更多信息和我的博客文章用于通用Drupal 6到7数据库语法转换信息。

 

You do not need to use db_select() for a static query like this. You shouldn't, actually, see Given that db_select is much slower than db_query, why would I want to use it?.

You just need to pass that to db_query(), the only thing that changed is how you add placeholders.

$result = db_query('select tid,name from {taxonomy_index} as ti left join {taxonomy_term_data} as ttd on ti.tid=ttd.tid where vid=2 and nid=:nid', array(':nid' => $nid)); foreach ($result as $term) {   // $term contains the object for the taxonomy term. } 

See http://drupal.org/developing/api/database for more information and my blog post for generic Drupal 6 to 7 database syntax conversion information.

 
 
         
         
25
 
vote
  $terms = db_select('taxonomy_index', 'ti')   ->fields('ti', array('tid', 'name')); $terms->leftJoin('taxonomy_term_data', 'ttd', 'ti.tid = ttd.tid'); $terms->condition('vid', 2)   ->condition('nid', $nid)   ->execute();  while ($term = $terms->fetch()) {   // $term contains the object for the taxonomy term. }   
 
$terms = db_select('taxonomy_index', 'ti')   ->fields('ti', array('tid', 'name')); $terms->leftJoin('taxonomy_term_data', 'ttd', 'ti.tid = ttd.tid'); $terms->condition('vid', 2)   ->condition('nid', $nid)   ->execute();  while ($term = $terms->fetch()) {   // $term contains the object for the taxonomy term. } 
 
 
       
       
0
 
vote
          $catalog_pagination = db_select('taxonomy_index', 'ti')           ->fields('pimg',array('uc_product_image_target_id','entity_id'))           ->fields('fm',array('fid','filename'))               ->fields('ti', array('nid', 'tid'));         $catalog_pagination->leftJoin('node__uc_product_image', 'pimg', 'pimg.entity_id = ti.nid');          $catalog_pagination->leftJoin('file_managed', 'fm', 'fm.fid = pimg.uc_product_image_target_id');           $catalog_pagination->condition('ti.tid', $term_id);         $catalog_pagination->orderBy('ti.nid', 'DESC');         $catalog_pagination = $catalog_pagination->execute();         $total_pages = $catalog_pagination->fetchAll();   
 
        $catalog_pagination = db_select('taxonomy_index', 'ti')           ->fields('pimg',array('uc_product_image_target_id','entity_id'))           ->fields('fm',array('fid','filename'))               ->fields('ti', array('nid', 'tid'));         $catalog_pagination->leftJoin('node__uc_product_image', 'pimg', 'pimg.entity_id = ti.nid');          $catalog_pagination->leftJoin('file_managed', 'fm', 'fm.fid = pimg.uc_product_image_target_id');           $catalog_pagination->condition('ti.tid', $term_id);         $catalog_pagination->orderBy('ti.nid', 'DESC');         $catalog_pagination = $catalog_pagination->execute();         $total_pages = $catalog_pagination->fetchAll(); 
 
 
-1
 
vote

//不要忘记"fetchall()" 功能:

  $terms = db_select('taxonomy_index', 'ti')   ->fields('ti', array('tid', 'name')); $terms->leftJoin('taxonomy_term_data', 'ttd', 'ti.tid = ttd.tid'); $terms->condition('vid', 2)   ->condition('nid', $nid)   ->execute()   **->fetchAll();** // an array of objects  **$i = 0; while ($i < count($terms)) {   $terms[i]->...   // $terms[i] contains the object for the taxonomy term.   $i++; }**   
 

//Don't forget "fetchAll()" function:

$terms = db_select('taxonomy_index', 'ti')   ->fields('ti', array('tid', 'name')); $terms->leftJoin('taxonomy_term_data', 'ttd', 'ti.tid = ttd.tid'); $terms->condition('vid', 2)   ->condition('nid', $nid)   ->execute()   **->fetchAll();** // an array of objects  **$i = 0; while ($i < count($terms)) {   $terms[i]->...   // $terms[i] contains the object for the taxonomy term.   $i++; }** 
 
 

相关问题

0  如何修改“选择列表”字段的内容?  ( How do i modify the content of a select list field ) 
我有一个包含节点参考字段的内容类型,因此用户可以从列表中选择节点标题。我需要从列表中过滤掉一些节点(那些与当前日期大的日期字段的节点)。 我知道 hook_form_alter ()可以用来修改表单字段的显示和验证,但可能不会更改现场使用的查询。所以我想我需要为此字段编写某种预处理函数,这对内容进行了第二个过滤器? ...

0  检测形式刷新和回调!  ( Detection of form refresh and callback ) 
如何检测该页面的页面,其中表单是刷新,并检测表格仅刷新表单吗? 我告诉你整件事:我正在构建一个模块。该模块中的表单具有Ajax-ed元素。首先加载表单(或刷新包含表单的页面)数据库查询(填写表格),即我想要的东西。但是,当触发Ajax-ed元素时,再次执行查询,我不希望。 如何在执行AJAX回调时停止执行此查询? 该...

2  Drupal 7文件权限的问题  ( Problem with drupal 7 file permissions ) 
我在别人的服务器上设置了一个工作的Drupal 7安装,如果给出了通往缩略图文件夹的所有文件夹,则只有的图像生成。 这必须是apache配置问题 - 有没有其他人遇到过这个? ...

4  以编程方式附上评论表格  ( Attaching the comment form programmatically ) 
如何在自定义模块中以编程方式添加评论表格(注释模块)? 换句话说,应该将适当的代码添加到您的模块代码中,以添加完整的"发布新评论" 表单(注释核心模块)? 表示,我如何强制使用自己的模块安装注释模块? 我在编辑的版本中重新询问我的问题,我达到了一些新结果:)。 我在我的自定义模块中创建了一个自定义菜单,当然是项目...

4  如何以编程方式创建一个简单的“页面”节点?  ( How do i programmatically create a simple page node ) 
我已经找到了 drupal 6文档关于如何编程方式地创建页面节点。 如何在Drupal 7中实现这一点? 我改变了我的策略,我正在使用另一种方法,但我收到以下错误: 致命错误:无法访问C: ... ... ... ... modules field field.attach.inc中的空的属性在198...

0  您如何调整块中的表单元素大小?  ( How do you resize a form element in a block ) 
我有两个街区,一个有一个搜索论坛(使用Drupal Finder模块)和电子邮件邀请模块,并且出于某种原因,两个输入表单都在块边框之外。 两人都给我两个不同的问题。 Finder模块的搜索栏超出了块边框,但整个电子邮件邀请块位于边框之外。 如何调整块的大小? ...

1  为什么有一个<p>标签我没有添加它?  ( Why is there a p tag where i didnt add it ) 
我将以下代码放入bock内容框中,并将输入类型设置为 full html ;然后我在页面上启用它 - front.tpl.php。当我查看HTML源时,我 看到 <a> 标签包含一个 <p> 标记。 <ul> <li><a href="addons.html"><img class="floa...

6  限制Drupal中自定义模块的权限  ( Restrict permission to custom modules in drupal ) 
我正在使用drupal 6,我创建了一个自定义模块。该模块由一种形式组成,可用于将记录添加到数据库。 但我看到所有用户,均匀的用户都可以访问此表单的链接( 998876661 )。 我想限制对此模块的访问,并从所有普通用户中形成。我只想要管理员访问它。 我已经创建了一个名为Administrator的角色,并仅为管理...

1  弹出窗口中的过程表单  ( Process form in popup window ) 
我在drupal中有一个自定义模块,我还有一个自定义表,用于存储研讨会的详细信息,例如姓名,描述,日期和位置。 我在左边栏块中显示研讨会的名称;当用户点击研讨会名称时,我希望在表单中显示其其他详细信息(描述,位置等)(其中包括"提交" 按钮)在弹出模态框中。 当用户点击提交按钮时,用户将在研讨会中加入(插入数据库)。...

5  缓存问题:更新节点  ( Cache problem update node ) 
我正在运行一个带有"匿名用户的缓存页面" 和"缓存块" 启用的Drupal 7网站。 "最小缓存生命周期" 和"缓存页面的到期" 都设置为1天。 当我更新节点时,例如,编辑图片,并将该页面视为匿名用户时,未显示新图片。当我手动清除缓存时,页面将显示出来。它就像在更新节点后未清除缓存。 API的提取物: 模块/ n...

3  如何获取一个主体.Onload事件执行?  ( How do get a body onload event executed ) 
背景: (*)我是一个javascript dilettante - 我刚刚在我需要时抄袭。 (*)我有一块javascript,我用一个用我加载的虚拟页面来测试,只需通过 <body onload="..."/> 调用它。它做了我想要的。 (见 https://github.com/cwestin/bobt/ b...

39  托管文件:可能无法引用字段中使用的文件  ( Managed file the file used in the field may not be referenced ) 
我正在使用 managed_file 类型。每当我尝试编辑和保存具有托运_file元素的表单时出现错误:可能无法引用图片字段中使用的文件。 这是我正在使用的代码: function foo_form ($form, &$form_state, $foo) { ... $form['file...

2  自定义表或CCK?  ( Custom table or cck ) 
目前正在使用一个新要求的项目,以简单的方式向用户提交的队列,并将它们提交给远程API: 收集用户的提交(具有表格) 每个提交点到远程系统上的记录(远程API提供的UUID) 每次提交都有一个状态(即:新,接受,拒绝) 每个提交存储许多其他数据字段 每个提交引用drupal 中已存在的节点ID 状态为"new" 状态...

4  成功登录后如何关闭登录窗口  ( How to close login popup after successful login ) 
我正在开发FF扩展,它显示第三方网站的特定于用户的信息。用户需要登录我的Drupal-网站。我正在使用跨域证明 jQuery.ajax() 检查登录状态。如果用户未登录,则FF-extension会打开一个弹出窗口( window.open() ),显示Drupal登录/寄存器/ passwordlost页面(/用户...

3  如何主题用户个人资料页面?  ( How to theme the user profile page ) 
我必须修改的文件是什么,以便让drupal输出自定义用户页面。 我需要更改的文件的默认链接是: http://www.example.com/?q=user/xx 其中xx是用户标识。 此页面没有正确使用,我想修复它,但我如何知道哪个文件是drupal调用? 在drupal 7默认页面和链接上有一个参考指南...

42  如何将变量从.php文件发送到.js文件?  ( How to send variable from php file to js file ) 
我希望有人能够帮助我。 问题是以下一个: 1)我有一个模块,其中一个分配变量才能发送到模板文件php.tpl <?php ... $testvar="Hello from alex!"; $variables['testvar'] = $testvar; ... ?> 此变量可以在php.tpl文件中显...

3  有这些功能是否有问题报告模块?  ( Is there an issue reporting module with these features ) 
我们有3个部门,我们为所有项目用户提供支持。我们希望使用Drupal 7网站收到支持请求,而不是接收电话。 我们只需要一个支持请求表格 表单向专家发送通知电子邮件 提交的问题应由项目组列出;只有专家可以访问列表。 表单访问权限仅适用于经过身份验证的用户。 用户没有进度状态报告。 你建议什么? ...

2  如何删除引用给定的所有节点?  ( How to delete all nodes referencing a given one ) 
我正在基于Drupal Commerce工作的目录。我有一个产品显示内容类型引用产品实体。我正在考虑使内容经理更容易生命的方法。 我在创建产品并创建相应的产品显示时触发该规则。但我无法弄清楚在删除产品时删除产品显示节点的最佳方法。 直到现在我已经尝试过Vbo,但似乎在Drupal 7规则中缺乏运行VBO行动的能力。...

2  使用代码选择节点的字段  ( Select the fields of a node using code ) 
我是德鲁佩尔的新手,我有一些问题。 我需要从节点(通过代码)中选择一些字段,然后处理数据。 [全尺寸图像] 基本上,我想显示列"值" 列,由"类别" 分组,但随着每个字段的内容类型是一个表,我不知道如何做到。 ...

2  Drupal:多语种SEO网站  ( Drupal multilingual seo website ) 
我正在尝试用博客建立一个简单的网站。该网站需要拥有,至少4种语言和SEO优化(标题描述关键字)。 请向我建议使用哪些模块,如果有任何方法,请执行此操作。是否有任何预先制造的配置文件? 最后,我想创建一个配置文件,我将为功能项目复制。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.