mysql - SQL:使颜色表中的颜色可搜索

标签 mysql sql colors sqlconnection

我有一个包含不同颜色卡片的数据库。

卡片可以是“无色”或一种或多种颜色: "红色","绿色","白色","蓝色","黑色

卡片卡片表中,包含id、name和一些其他卡片信息,

颜色颜色表中,名称(例如:“红色”),颜色代码(ex:"r") 和颜色 id

还有一个连接表,包含card_idcolor_id

所以问题是如何使颜色可搜索

我希望能够找到所有“只有红色”的卡片,
以及所有“红色或蓝色”的卡片,
以及所有“红色和蓝色”的卡片(对于 3,4 和 5 种颜色也是如此!)

有 30 种不同的颜色组合:

//000001//000010//000011//000100//000101//000110//000111
//001000//001001//001010//001011//001100//001101//001111
//010000//010001//010010//010011//010100//010101//010110
//010111//011000//011001//011010//011011//011100//011101
//011111
//100000 (Colorless)

我发现这对 UNION 是可行的,但是
必须做出所有 30 种不同的组合,然后将它们全部组合在一起!

SELECT 
c.id
'false' AS Colors,
'true' AS Red, 
'false' AS Blue
'false' AS Green
'false' AS White
'false' AS Black
'false' AS Colorless
FROM cards_data AS c
INNER JOIN con_cards_colors AS ccc_red ON c.id = ccc_red.cards_id
INNER JOIN colors AS co_red ON co_red.id = ccc_red.colors_id
WHERE
    co_red.name = "Red"

Union
(...)

这似乎不是一个好的解决方案!

所以任何想法都会受到赞赏?

(最好我喜欢某种 SQL View..)

最佳答案

您将在此处使用条件聚合。例如,对于红色和蓝色,您想在其中找到卡片

  1. 两种颜色都存在
  2. 不存在其他颜色

这意味着如果我计算一张卡片的红色和蓝色,我必须得到 2。如果我计算所有颜色,我也必须得到 2。(对于一种、三种或更多颜色也是如此。)

所以使用这个查询,只改变提到的颜色和颜色的数量:

select *
from cards_data where id in
(
  select cards_id
  from con_cards_colors
  group by cards_id
  having count(case when colors_id in (select id from colors where name in ('Red','Blue')) then 1 end) = 2 -- i.e. find all
  and count(*) = 2 -- i.e. find only those and no others
);

关于mysql - SQL:使颜色表中的颜色可搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920494/

相关文章:

css - SCSS 动态变色

mysql - 使用 SQL_CALC_FOUND_ROWS 和 UNION ALL 的 Select 语句

mysql - Laravel:仅向订阅者加载具有隐私的帖子

java - 使用 json 数据的依赖 android spinner

SQL 聚合具有相同折扣代码的特定产品的所有购买

android - flutter 。使用主题,如何更改滚动偏移颜色?

python - 编译MYSQL程序时出现错误 "indefined reference to"

mysql - MySQL Workbench 6.0.8.11354 (6.0) 中的错误 "Index out of range",什么问题?

c++ - 如何使用 SQL 更新数据库 (MS Access .mdb) 中的数据

android - 使用 prefs.xml <ListPreference> 进行颜色更改的 Activity 在启动时崩溃