我有一个带有SET类型的列的产品表(称为especialidad),带有这些可能的值。
[0] => NADA [1] => Freestyle / BMX [2] => Street / Dirt [3] => XC / Rural Bike [4] => All Mountain [5] => Freeride / Downhill / Dual / 4x [6] => Ruta / Triathlon / Pista [7] => Comfort / City / Paseo [8] => Kids [9] => Playera / Chopper / Custom [10] => MTB recreacion [11] => Spinning / Fitness
任何特定产品都可以有一个或多个这样的i / e“Freestyle / BMX,Street / Dirt” 给定行的子集,我需要获得所有当前“especialidad”值的列表。但我需要一个爆炸和独特的列表
我需要一个像这样的列表
我尝试使用group_concat(UNIQUE),但我得到了一个排列列表......
更新: especialidad是SET类型的列。没有联接,只有一个表。
假设该表具有ID列,名称列和特殊列。
especialidad:set('NADA','Freestyle / BMX','Street / Dirt','XC / Rural Bike','All Mountain','Freeride / Downhill / Dual / 4x','Ruta / Triathlon / Pista','Comfort / City / Paseo','Kids','Playera / Chopper / Custom','MTB recreacion','Spinning / Fitness')
答案 0 :(得分:1)
您可以使用BIT_OR聚合函数查找所有已设置的值:
Select BIT_OR(especialidad) AS active_values
from myTable WHERE [your selection criteria];
然后,完成后,您可以使用concat_ws编写一个混乱的条件来将该组的位值解码回stings:
Select concat_ws(','
if (num&1,'NADA',null),
if (num&2,'Freestyle / BMX',null),
if (num&4, 'Street / Dirt',null),
... etc ...
) from
(Select BIT_OR(especialidad) AS num from myTable
WHERE [selection criteria]) as t;
但我还建议您阅读有关SET数据类型的this article,特别是标题为“为什么不应该使用SET”的部分。
答案 1 :(得分:0)
您应该让我们了解您的数据库结构。但是我们在这里做一些假设。
我假设有一些ProductEspecialidad表具有ProductID和EspecialidadID。
然后Article1有两个记录=> EspecialidadID = 1,EspecialidadID = 2
因此,在显示屏上,您为ProductID选择所有ProductEspecialidad并显示文本说明。
如果您需要一个类似于您所描述的列表(并且Especialidad的名称在列名称中),那么您需要
select name from Especialidad where ID in
(select unique EspecialidadID from ProductEspecialidad
where ProductID = [your products selection conditions or nothing])