1

我需要构建一个查询来比较我的表中的两个值对之一,我的表结构看起来像这样:

   product_id   |  psi_a   |   gpm_a   |   psi_b   |   gpm_b   |
   -------------------------------------------------------------
   PRODUCT_123  |   1000   |    400    |   8000    |    300    |
   -------------------------------------------------------------
   PRODUCT_456  |  2804    |   3006    |   5800    |    579    |

当我的psi_aandgpm_a是一个值对时psi_bgpm_b我目前必须运行两个 SQL 查询来获取正确呈现我的站点页面所需的值,但这会导致两组结果被附加到页面上。

标记

$flowQ = $function->flow_query( $pType, $pVal, $gVal, $class_style, $cVal, $pageCat );
$highQ = $function->high_query( $pType, $pVal, $gVal, $class_style, $cVal, $pageCat );

if(empty($flowQ)===false){
   $function->generate_view( $flowQ, $pType, $pVal, $gVal, $class_style, $cVal, $pageCat );
}

目前这些函数构建的SQL如下:

流查询();

$query = $this->db->prepare( "SELECT * FROM `pumps` WHERE `pump_type` = ? AND `psi_a` >= ? AND  gpm_a >= ? AND `pump_category` = ? ORDER BY pump_type DESC" );
$query->bindValue(1, $pType);
$query->bindValue(2, $pVal);
$query->bindValue(3, $gVal);
$query->bindValue(4, $cVal);

第二个查询几乎相同,但它使用psi_aandgpm_a作为值参数。有什么方法可以组合这些查询以返回将引用psi_aand的单个结果集,gpm_a如果没有返回结果,那么它引用psi_band gpm_b

我对 SQL 比较陌生,所以如果这不可能,那么我将寻求替代解决方案。

4

1 回答 1

2

不妨称之为答案。您可以在 where 语句中使用和/或子句。

where (psi_a = ? and gpm_a = ? ) or (psi_b = ? and gpm_b = ? )

您还可以在 select 语句中放置一个 case 子句,如果需要,它将显示哪个 where 子句找到了匹配项。

于 2013-09-09T23:06:39.173 回答