【发布时间】:2018-06-25 04:08:19
【问题描述】:
好吧,我需要完成的有点复杂,但我会尽力解释。 所以我有一张这样的桌子:
标识 ||颜色 ||红OK ||蓝色OK ||黄色OK ||绿色OK ||橙色好的
1-||----1---||----1-----||-----1-----||-------1 ------||------0------||------1------
2-||----3---||----1-----||-----0-----||-------1 ------||------1------||------1------
3-||----1---||----0-----||-----0-----||-------0 ------||------0------||------1------
4-||----5---||----1-----||-----1-----||-------0 ------||------1------||------1------
5-||----2---||----0-----||-----0-----||-------1 ------||------0------||------1------
在颜色字段中,数字 1 - 5 代表用户最喜欢的颜色(1 代表红色,2 代表蓝色,3 代表黄色,4 代表绿色,5 代表橙色)。 redOK、blueOk、yellowOK、greenOK和orangeOK字段表示用户是否愿意与某个喜欢的颜色的人匹配。在这些字段中,1 表示是,0 表示否。例如,id=1 的用户最喜欢的颜色是红色,因为他们的“颜色”字段是 1,他们愿意与喜欢的颜色是红色、蓝色、黄色或橙色但不是绿色的人匹配,因为“greenOK”字段为 0。所以我需要做的是创建一个存储过程,该过程返回一个用户的颜色和颜色偏好与特定用户的颜色和颜色偏好相匹配的查询。因此,例如,id 为 1 和 2 的用户将是匹配的,因为用户 1 是红色的,用户 2 选择了红色是好的,用户 2 是黄色的,用户 1 选择了黄色是好的。另一方面,用户 3 和用户 2 将不匹配,因为即使用户 3 是红色并且用户 2 选择红色可以,但用户 2 是黄色并且用户 3 说只有橙色可以。
我整天都在思考这个问题,但无法完全找到解决方案。我的第一个想法是使用 SELECT INNER JOIN 语句,但我不太确定如何因为有这么多可能的组合?然后我尝试使用用户的首选项创建一个临时表,然后使用光标遍历这些首选项,同时检查用户的首选项是否与目标用户的颜色匹配,但我也无法弄清楚。你们能帮忙吗?
【问题讨论】:
标签: mysql stored-procedures mariadb