我正在使用Drupal 7,并且必须在多个表上建立并集。为了使工会正常工作,必须满足一些条件:
某些表缺少一列,因此为了弥补这一点,我只添加了以下内容:$query->addExpression(':field_1', 'field_1', array(':field_1' => NULL));
。因此,此时满足条件1和2,但是]选择中字段的顺序是不同的。
请参见下面的示例:
$query_1 = db_select('table_one', 't1'); $query_1->fields('t1', array('field_1', 'field_2')); $query_2 = db_select('table_two', 't2'); if (true) { $query_2->fields('t2', array('field_1')); } else { $query_2->addExpression(':field_1', 'field_1', array(':field_1' => NULL)); } $query_2->fields('t2', array('field_2')); $query_3 = db_select('table_three', 't3'); if (false) { $query_3->fields('t3', array('field_1')); } else { $query_3->addExpression(':field_1', 'field_1', array(':field_1' => NULL)); } $query_3->fields('t3', array('field_2'));
结果是:
// dpq($query_1); SELECT t1.field_1 AS field_1, t1.field_2 AS field_2 FROM {table_one} t1 // dpq($query_2); SELECT t2.field_1 AS field_1, t2.field_2 AS field_2 FROM {table_two} t2 // dpq($query_3); SELECT t3.field_2 AS field_2, '' AS field_1 FROM {table_three} t3 // dpq($query_1->union($query_2)->union($query_3)); SELECT t1.field_1 AS field_1, t1.field_2 AS field_2 FROM {table_one} t1 UNION SELECT t2.field_1 AS field_1, t2.field_2 AS field_2 FROM {table_two} t2 UNION SELECT t3.field_2 AS field_2, '' AS field_1 FROM {table_three} t3
似乎使用
$query->addExpression
不能保证该字段的位置位于您期望的位置。查看使用addExpression
的第三个查询的转储。关于如何解决此问题的任何想法?
我正在使用Drupal 7,并且必须在多个表上建立并集。为了使联合工作,必须满足一些条件:相同列数相同数据类型相同顺序某些表是...
这是我发现保留订单的唯一解决方法。即使该字段存在或不存在,也请使用表达式。这样,订单就是您期望的订单:
我想添加一个简化的示例。为了保持字段的顺序而不是