如何将MySQL查询转换为DB_Select版本的子查询? -- database 领域 drupal 相关 的问题

How do convert mysql query with sub queries to a db_select version?


0
vote

问题

中文
下面

是一个MySQL查询,返回正确的结果集。如何将其转换为db_select()版本?

  SELECT p.id, u.name, pa.field_address_2_value, pa2.display, pa3.field_company_value FROM ms_order_products p LEFT JOIN ms_orders o ON p.oid = o.oid  LEFT JOIN users u ON o.uid = u.uid LEFT JOIN  (     select *      from field_data_field_address_2  ) pa  ON u.uid = pa.entity_id LEFT JOIN  (     select *      from ms_order_adjustments  ) pa2  ON o.oid = pa2.oid LEFT JOIN  (     select *      from field_data_field_company  ) pa3  ON u.uid = pa3.entity_id WHERE p.id = 'RM11'   
英文原文

Below is a mysql query that returns a proper result set. How can I convert this into a db_select() version?

SELECT p.id, u.name, pa.field_address_2_value, pa2.display, pa3.field_company_value FROM ms_order_products p LEFT JOIN ms_orders o ON p.oid = o.oid  LEFT JOIN users u ON o.uid = u.uid LEFT JOIN  (     select *      from field_data_field_address_2  ) pa  ON u.uid = pa.entity_id LEFT JOIN  (     select *      from ms_order_adjustments  ) pa2  ON o.oid = pa2.oid LEFT JOIN  (     select *      from field_data_field_company  ) pa3  ON u.uid = pa3.entity_id WHERE p.id = 'RM11' 
  
   
   

回答列表

0
 
vote
vote
最佳答案
 

我找到了答案,见下文。 (我也添加了几个字段)

    $sub_query_1 = db_select('field_data_field_address_2', 'addr2');   $sub_query_1->fields('addr2', array('field_address_2_value', 'entity_id'));    $sub_query_2 = db_select('ms_order_adjustments', 'a');   $sub_query_2->fields('a', array('display', 'oid'));    $sub_query_3 = db_select('field_data_field_company', 'comp');   $sub_query_3->fields('comp', array('field_company_value', 'entity_id'));    $query = db_select('ms_order_products', 'p');    $query->fields('p', array('id', 'oid', 'type', 'amount'));   $query->fields('o', array('oid', 'uid', 'status', 'order_type', 'created'));   $query->fields('u', array('uid', 'mail', 'name'));   $query->fields('fn', array('field_first_name_value'));   $query->fields('ln', array('field_last_name_value'));   $query->fields('adr1', array('field_address_1_value'));   $query->fields('city', array('field_city_value'));   $query->fields('state', array('field_state_value'));   $query->fields('zip', array('field_zip_code_value'));   $query->fields('pa', array('field_address_2_value'));   $query->fields('pa2', array('display'));   $query->fields('pa3', array('field_company_value'));    $query->leftjoin('ms_orders', 'o', 'o.oid = p.oid');   $query->leftjoin('users', 'u', 'o.uid = u.uid');   $query->leftjoin('field_data_field_first_name', 'fn', 'u.uid = fn.entity_id');   $query->leftjoin('field_data_field_last_name', 'ln', 'u.uid = ln.entity_id');   $query->leftjoin('field_data_field_address_1', 'adr1', 'u.uid = adr1.entity_id');   $query->leftjoin('field_data_field_city', 'city', 'u.uid = city.entity_id');   $query->leftjoin('field_data_field_state', 'state', 'u.uid = state.entity_id');   $query->leftjoin('field_data_field_zip_code', 'zip', 'u.uid = zip.entity_id');    $query->addJoin('LEFT', $sub_query_1, 'pa', 'u.uid = pa.entity_id');   $query->addJoin('LEFT', $sub_query_2, 'pa2', 'o.oid = pa2.oid');   $query->addJoin('LEFT', $sub_query_3, 'pa3', 'u.uid = pa3.entity_id');    $query->condition('p.id', 'RM11', '=');    $result = $query->execute();   
 

I found the answer, see below. (I added a few more fields as well)

  $sub_query_1 = db_select('field_data_field_address_2', 'addr2');   $sub_query_1->fields('addr2', array('field_address_2_value', 'entity_id'));    $sub_query_2 = db_select('ms_order_adjustments', 'a');   $sub_query_2->fields('a', array('display', 'oid'));    $sub_query_3 = db_select('field_data_field_company', 'comp');   $sub_query_3->fields('comp', array('field_company_value', 'entity_id'));    $query = db_select('ms_order_products', 'p');    $query->fields('p', array('id', 'oid', 'type', 'amount'));   $query->fields('o', array('oid', 'uid', 'status', 'order_type', 'created'));   $query->fields('u', array('uid', 'mail', 'name'));   $query->fields('fn', array('field_first_name_value'));   $query->fields('ln', array('field_last_name_value'));   $query->fields('adr1', array('field_address_1_value'));   $query->fields('city', array('field_city_value'));   $query->fields('state', array('field_state_value'));   $query->fields('zip', array('field_zip_code_value'));   $query->fields('pa', array('field_address_2_value'));   $query->fields('pa2', array('display'));   $query->fields('pa3', array('field_company_value'));    $query->leftjoin('ms_orders', 'o', 'o.oid = p.oid');   $query->leftjoin('users', 'u', 'o.uid = u.uid');   $query->leftjoin('field_data_field_first_name', 'fn', 'u.uid = fn.entity_id');   $query->leftjoin('field_data_field_last_name', 'ln', 'u.uid = ln.entity_id');   $query->leftjoin('field_data_field_address_1', 'adr1', 'u.uid = adr1.entity_id');   $query->leftjoin('field_data_field_city', 'city', 'u.uid = city.entity_id');   $query->leftjoin('field_data_field_state', 'state', 'u.uid = state.entity_id');   $query->leftjoin('field_data_field_zip_code', 'zip', 'u.uid = zip.entity_id');    $query->addJoin('LEFT', $sub_query_1, 'pa', 'u.uid = pa.entity_id');   $query->addJoin('LEFT', $sub_query_2, 'pa2', 'o.oid = pa2.oid');   $query->addJoin('LEFT', $sub_query_3, 'pa3', 'u.uid = pa3.entity_id');    $query->condition('p.id', 'RM11', '=');    $result = $query->execute(); 
 
 

相关问题

1  使用备份和迁移文件还原以前版本的网站的理想方式是什么?  ( What is the ideal way to restore a previous version of a site with backup migr ) 
所以我已经用备份和迁移备份了我的网站,我始终发现备份和amp;迁移.mysql文件小于"Drush SQL-Dumb" SQL文件。有谁知道为什么? 还使用备份和amp恢复的最快方式;迁移?我通常会解压缩保存到我服务器的GZ文件,只需执行MySQL丢弃数据库,然后再次重新创建并填充SQL文件。我不确定我是否正在努力做...

0  如何从$ form_state ['值']恢复表单值?  ( How to restore form values from form statevalues ) 
我在数据库中保存 $form_sate['values'] 。当我的用户返回到我想要之前所提出的值的表格。类似: function my_form($form, &$form_sate) { $form_state_saved = get_form_state_values_from_db(); $fo...

0  查询将大数字视为字符串  ( Query treating large number as a string ) 
我正在尝试在表上运行一个选择语句。 该列是十进制(20,0)无符号。 可以使用SELECT语句找到大部分条目: db_query('SELECT * FROM {foo_table} WHERE foo_id = :other_id',array(':other_id' => $value)) 和$ val...

1  自定义模块:DB_SELECT标题和身体?  ( Custom module db select title and body ) 
我有点困惑,通过节点数据如何存储在数据库中。它似乎标题存储在DB"节点" 中,而正文陷入困境的字段_DATA_BODY,则在其他地方放置自定义字段。 我创建了一个拔出某些内容的自定义模块,但我需要使用正文匹配标题。我一直成功地拉动我的标题列表: function foo() { $query ...

5  我们可以在没有hook_install的模块中使用hook_update_n吗?  ( Can we use a hook update n for a module without hook install ) 
我正在研究一个没有安装文件的自定义模块,但不管要使用大量表。以前工作的人手动创建了数据库表。现在我想向它添加更多表格。我可以手动运行查询以完成作业,但我想使用'drupal'方法来做到这一点。所以我想知道我们是否可以为没有hook_install的模块使用hook_update_n? ...

3  Drupal 7 db_error()等价物?  ( Drupal 7 db error equivalent ) 
我正在尝试在查询失败后弄清楚如何获得最后一个数据库错误,我无法找到适当的功能。它似乎在Drupal 7有一个 99887661 函数,它会返回信息。 如何在Drupal 7中检索数据库错误? 我的代码: try { $q = db_query($q); } catch (Exception $e) { ...

2  如何在db_select()方法中编写内部子查询?  ( How to write inner subquery in db select method ) 
如何在Drupal 7中编写子查询?我的查询如下: SELECT N.nid AS n_nid FROM workflow_node WN LEFT OUTER JOIN node N ON WN.nid = N.tnid WHERE ( WN.sid IN (SELECT WT.sid FROM (SE...

-1  db_select使用类和返回对象  ( Db select usage in class and returned object ) 
我想在某个类的静态公共功能中使用db_select。查询应该是基本查询,然后可以在调用函数中定制。返回结果集似乎有效,但我想返回Drupal db_select-object以获取更多使用。这是一些示例代码: class foo{ public static function get_query() { ...

1  安装模块时如何创建DB表?  ( How to create db table while installing a module ) 
我想在安装模块时在Drupal中创建一个表(由ME解码的自定义模块)。我在下面尝试了,但我无法在Drupal DB中创建一个表。我错过了什么,我还有什么要做的? function custom_agent_handler_install() { if (!db_table_exists('demo_score'...

3  多个加入查询  ( Multiple join query ) 
我有一个自定义模块,我正在使用一些查询,但我没有得到正确的输出 $query = db_select('node', 'N_en')->extend('PagerDefault'); $query->addField('N_en', 'nid', 'en_nid'); $query->addField('N...

1  使用子查询的db_select  ( Using db select with subqueries ) 
这是我尝试通过数据库API实现的原始查询的示例原始查询: SELECT * FROM ( SELECT n.nid AS entity_id, n.uid, n.title, node_body.body_value, node_body.bod...

-1  五星级评分和评论  ( Five star ratings and reviews ) 
我有锦标赛细节。我想评价并查看每个锦标赛细节。在这里,我显示了锦标赛的所有细节,我已安装投票和五星级评级模块。但我无法与锦标赛详情联系。如何使其成为使其在单击"锦标赛详细信息" 时,它将转向具有速率和评论选项的新页面? 我正在使用自定义模块来显示锦标赛详细信息。 ...

0  安装自定义模块时创建表  ( Create table while installing my custom module ) 
我的自定义模块名称是"person" ,它的.install文件有以下代码。 <?php /** * Implementation of hook_install(). */ function person_install() { drupal_install_schema('person'); } ...

4  EntityFieldQuery在hook_cron中无法正常工作  ( Entityfieldquery doesnt work correctly in hook cron ) 
我正在在我的Drupal 7项目中编程一个新模块。在我的模块中,hook_cron是覆盖。 在我的hook_cron函数中,我想选择一个节点类型,具有CCK字段的特定过滤器。 我正在使用 entityfieldquery 以运行查询。 我的特定内容类型是"Order_Status" 在这里,我们是第一个查询代码。 ...

0  DB中的空值显示页面上的内容  ( Null value in db displays content on page ) 
我在下一页底部有一个空白类别框( http://www。 suncorstainless.com/stainless-steel-hardware ),它似乎是由我的数据库中某处的桌子中的空值引起的。我不是这个网站的开发人员,我很难确定这个问题在dB中。 是否有可用于确定在页面上显示内容的DB表? 感谢 - 提前 ...

0  创建表查询给我“表不存在”错误  ( Create table query gives me table does not exists error ) 
我的本​​地Drupal网站崩溃,它显示出此错误: p> podeprexception:sqlstate [42s02]:未找到基本表或视图:1146表'drupal722.semaphore'不存在:选择过期,从{semaphore}的值= name =:name; rouck_may_be_availabl...

0  无法导入数据库。 WAMP服务器中发生的错误[已关闭]  ( Cannot import database an error occuring in wamp server ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并阐明编辑此帖的问题。 关闭 7年前。 ...

1  如何将db_query作为选项列表返回并显示它  ( How to return a db query as an option list and display it ) 
<?php /** * Define callbacks that can be used as custom select list options. */ function webform_contacts_webform_select_options_info() { $items = array...

0  以编程方式检索实体参考字段  ( Retrieving entity reference fields programmatically ) 
我被卡住了正确的方式检索实体参考字段。 我尝试的只是给了我一个错误或空的数组... 您在此处看到的是我的节点对象,该对象保存数据(从DSM输出复制): ... (Object) stdClass vid (String, 2 characters ) 64 uid (String, 1 characters )...

0  / admin / modules和视图编辑页面永远加载  ( Admin modules and views edit pages take forever to load ) 
我最近注意到,我的网站的两个特定部分是永恒的加载, 99887664 和 /admin/structure/views/view/{any-view}/edit 。在我禁用PHP MAX_EXECUATION_TIME之前(仅暂时),它会在5分钟内保持定时。 现在现在禁用超时,MySQL服务器正在消失。我已经看到了...




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


Licensed under cc by-sa 3.0 with attribution required.