是否可以使用 MySQL 'OR'查询设置首选项?



我有一个简单的表,其中包含蔬菜的营养数据(例如(。在某些情况下(但不是全部(,数据可能会根据蔬菜的种类而有所不同。

在页面级上,如果存在,我想输出品种本身的数据,但如果不存在,请一般输出蔬菜的数据。

这是我的查询(实际上"胡萝卜"值实际上是数字,我在这里更改了它们以易于理解(;

SELECT *
FROM fp_nutrition
WHERE fpID='carrot variety' AND approval_status='approved'
OR
fpID='carrot' AND approval_status='approved'
ORDER BY nutriID DESC

为了清楚起见,让我们假设此查询在"胡萝卜品种"的页面上运行。

以当前形式,它返回(例如(2行 - 一个用于"胡萝卜",一个用于"胡萝卜品种"。有什么方法可以更改此查询,因此它只返回一行 - 但是单行最合适(因此,首选'Carrot variety',但如果不存在的"胡萝卜"返回(。

到目前为止,我提出的唯一解决方案是按FPID desc订购并限制1,但是依赖于"胡萝卜"的数据始终首先添加(但可能不必必须依靠依靠在这种情况下(。

您可以 UNION 2查询的结果,但仅在第一个查询不存在的情况下显示第二个查询的结果

=>显示"胡萝卜品种"和胡萝卜(仅当不存在胡萝卜的情况下(

 SELECT *
      FROM fp_nutrition
     WHERE fpID            = 'carrot variety'
       AND approval_status = 'approved'
    UNION
    SELECT *
      FROM fp_nutrition
     WHERE fpID            = 'carrot'
       AND approval_status = 'approved'
       AND NOT EXISTS ( SELECT 1
                          FROM fp_nutrition
                         WHERE fpID            = 'carrot variety'
                           AND approval_status = 'approved' )
     ORDER BY nutriID DESC 

最新更新