我试着解释我需要什么......
我有一个简单的表data
:
id | post_id | color | year
---------------------------
1 | 1 | red | 1989
2 | 1 | red | 1990
3 | 1 | green | 1991
下一个查询工作正常:
SELECT *
FROM `data`
WHERE color = 'red'
AND year = 1989
并且返回结果:
id | post_id | color | year
---------------------------
1 | 1 | red | 1989
我需要从列color
和year
中逃脱,因为它们必须是动态的。
我尝试做这样的事情:
id | post_id | property
-----------------------
1 | 1 | red
2 | 1 | green
3 | 1 | 1989
4 | 1 | 1990
5 | 1 | 1991
但是有一些问题,因为当我执行下一个查询时:
SELECT *
FROM `data`
WHERE property = 'red'
AND property = 1989
我无法使用color = 'red'
和year = 1989
发帖,mysql会返回空结果。
如何修改我的表以便从列color
和year
中进行转义并保留第一个示例的查询逻辑?
答案 0 :(得分:1)
保留第一个查询,但只使用结合返回两列:
SELECT POST_ID, color as property
FROM `data`
WHERE color = 'red'
AND year = 1989
UNION ALL
SELECT Post_ID, Year as Property
FROM `data`
WHERE color = 'red'
AND year = 1989
虽然我无法想象自己使用它。我更喜欢单独的列;我无法想象业务需要或技术需要返回列表作为您的描述。如果您需要一列,则应在显示级别控制演示文稿,迭代列并以不同方式呈现它。
---基于评论的编辑 -
啊自定义字段: 所以看起来你的问题似乎不是关于设计,你已经涵盖了......有几种方法可以做到这一点。你的问题似乎是这样的:
当用户定义2个不同的值进行过滤时,如何确保每个数据对象都包含所有两个元素?
使用having子句和/或语句:
Select post_ID, property
from data
Where property = 'red'
or property = '1989'
group by post_Id, property
having count(post_ID) = 2
您知道根据所选的数量查找了多少个属性。所以只需在拥有子句中使用它作为属性。