Mysql 确定用户是否具有各种高级功能

Mysql 确定用户是否具有各种高级功能,mysql,sql,Mysql,Sql,我在网上找到了各种类似的解决方案,但到目前为止,似乎没有什么能完全满足我的需要 鉴于以下表格,为了本问题的目的,这些表格大大简化了: tblRetailers retailer_id company_name --------------------------- 1 ABC Ltd 2 DEF Ltd tblRetailerFeature retailer_feature_id retailer_id feature_op

我在网上找到了各种类似的解决方案,但到目前为止,似乎没有什么能完全满足我的需要

鉴于以下表格,为了本问题的目的,这些表格大大简化了:

tblRetailers

retailer_id    company_name
---------------------------
1              ABC Ltd
2              DEF Ltd

tblRetailerFeature

retailer_feature_id   retailer_id   feature_option_id
-----------------------------------------------------
1                     1             1
2                     1             4
3                     2             3
4                     2             6

tblFeatureOptions

feature_option_id   feature_id   title     Price
------------------------------------------------
1                   1            30 Days   14.95
2                   1            60 Days   29.90
3                   1            90 Days   44.85
4                   2            30 Days   19.95
5                   2            60 Days   39.90
6                   2            90 Days   59.95

tblFeatures

feature_id   title   
----------------------------
1            Top Listing
2            Gallery Listing
3            Premium Listing
我需要确定,对于每个零售商,他们是否有“顶级”、“画廊”和/或“高级”物品

因此,最终结果应该是这样的:

retailer_id   hasTopListing   hasGalleryListing   hasPremiumListing
--------------------------------------------------------------------
1             0               1                   0
2             1               1                   0
0/1为布尔值。
如何为此编写SQL?

好的,下面是您的解决方案:

结果:

RETAILER_ID HASTOPLISTING   HASGALLERYLISTING   HASPREMIUMLISTING
1   1   1   0
2   1   1   0

我不知道您的模式是如何工作的,因为我无法解释您所提供的输入所期望的输出

然而,这可能有助于:

SELECT
  r.retailer_id,
  MAX(fo.feature_id = 1) AS hasTopListing,
  MAX(fo.feature_id = 2) AS hasGalleryListing,
  MAX(fo.feature_id = 3) AS hasPremiumListing
FROM         tblFeatureOptions fo
  INNER JOIN tblRetailerFeature rf
          ON rf.feature_option_id = fo.feature_option_id
  RIGHT JOIN tblRetailers r
          ON r.retailer_id = rf.retailer_id
GROUP BY r.retailer_id
也可从您的样本数据中获取,网址为

我假设您使用
feature\u option\u id
tblRetailerFeature
加入到
tblFeatureOptions
。然后,我只需检查给定零售商id的任何行是否提到了每个相关的功能id。MySQL已经将比较视为0/1值,因此这里的
MAX
对应于所有行上的


从小提琴上可以看出,输出不是您要求的,而是我期望从您的输入中得到的。所以,要么指出如何加入数据,要么自己调整。

以及什么是
顶级
画廊
高级
物品?为什么
零售商id
有高级物品?零售商免费列出他们的业务,但可以选择购买高级功能:顶级,Gallery或Premium listings
功能\u id
=3是Premium Listing。为什么
retailer\u id
=
2
有高级列表?为了清晰起见,已经修复了这个问题,尽管该表只是显示我希望查询结果的外观,而不是数据的实际表示形式。
SELECT
  r.retailer_id,
  MAX(fo.feature_id = 1) AS hasTopListing,
  MAX(fo.feature_id = 2) AS hasGalleryListing,
  MAX(fo.feature_id = 3) AS hasPremiumListing
FROM         tblFeatureOptions fo
  INNER JOIN tblRetailerFeature rf
          ON rf.feature_option_id = fo.feature_option_id
  RIGHT JOIN tblRetailers r
          ON r.retailer_id = rf.retailer_id
GROUP BY r.retailer_id