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

标签 mysql sql

我已经尝试过各种类似的解决方案,这些都是我在网上找到的,但到目前为止似乎没有什么能完全满足我的需要。

鉴于下表,为了这个问题的目的大大简化了:

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

我需要为每个零售商确定他们是否有“Top”、“Gallery”和/或“Premium”列表

所以,最终结果应该是这样的:

retailer_id   hasTopListing   hasGalleryListing   hasPremiumListing
--------------------------------------------------------------------
1             0               1                   0
2             1               1                   0

0/1 是 bool 值。 如何为此编写 SQL?

最佳答案

我不明白你的模式是如何工作的,因为我无法解释你所提供的输入所期望的输出。

尽管如此,这可能会有所帮助:

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

也可在 http://sqlfiddle.com/#!2/ca9f8/10 获取您的样本数据

我假设您使用 feature_option_idtblRetailerFeature 加入到 tblFeatureOptions。然后我简单地检查给定零售商 ID 的任何行是否提到了每个相关的功能 ID。 MySQL 已经将比较视为 0/1 值,因此此处的 MAX 对应于所有行的 OR

正如您从 fiddle 中可以看出的,输出不是您要求的,但这是我期望从您的输入中得到的。因此,要么指出如何连接您的数据,要么自行调整。

关于mysql - 确定用户是否具有各种高级功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919852/

相关文章:

mysql - 获取 rails 中每个不同记录的所有列

php - 如何使用数组数据查询以在 PHP 中获取另一个数据

sql - RDBMS的实际大小限制

mysql - 如何从此 SELECT 中排除重复项?

sql - 查询返回空集 Mysql 5.1.49 但返回 5.0-ish 上的内容

C# EF 5.0 向 MySQL 数据库添加百万条记录需要数小时

mysql - 如何减少在数据库中选择数据的时间负载

sql - 在 Snowflake 中解析 JSON

sql - 查询以获取数据库中树的所有祖先/后代?

mysql - 在按其他字段排序的同时按数字对 varchar 进行排序