这似乎是工作确定
设置数据
DROP TABLE IF EXISTS plan;
CREATE TABLE plan (id int, service1 bool, service2 bool, service3 bool);
INSERT INTO `plan` (`id`, `service1`, `service2`, `service3`) VALUES (1, 1, 0, 0);
INSERT INTO `plan` (`id`, `service1`, `service2`, `service3`) VALUES (2, 0, 1, 0);
INSERT INTO `plan` (`id`, `service1`, `service2`, `service3`) VALUES (3, 1, 1, 1);
INSERT INTO `plan` (`id`, `service1`, `service2`, `service3`) VALUES (4, 1, 0, 1);
INSERT INTO `plan` (`id`, `service1`, `service2`, `service3`) VALUES (5, 0, 0, 1);
查询
select *
from plan A
left join (
select id, service1, service2, service3 from plan
union all
select null, null, null, null) B on B.id > A.id or B.id is null
left join (
select id, service1, service2, service3 from plan
union all
select null, null, null, null) C on C.id > B.id or C.id is null
WHERE (A.service1 + A.service2 + A.service3)
AND (A.service1 + ifnull(B.service1,0) + ifnull(C.service1,0)) = 1
AND (A.service2 + ifnull(B.service2,0) + ifnull(C.service2,0)) = 1
AND (A.service3 + ifnull(B.service3,0) + ifnull(C.service3,0)) = 1
结果
id | service1 | service2 | service3 | id | service1 | service2 | service3 | id | service1 | service2 | service3
1 | 1 | 0 | 0 | 2 | 0 | 1 | 0 | 5 | 0 | 0 | 1
1 | 1 | 0 | 0 | 5 | 0 | 0 | 1 | 2 | 0 | 1 | 0
2 | 0 | 1 | 0 | 4 | 1 | 0 | 1 | NULL | NULL | NULL | NULL
2 | 0 | 1 | 0 | NULL | NULL | NULL | NULL | 4 | 1 | 0 | 1
3 | 1 | 1 | 1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL
请发布您迄今为止编写的代码。人们通常不喜欢只为你写代码。事实上,这是一个工作描述,而不是一个问题。 – 2011-01-19 01:57:54
没有足够的信息。您将在搜索中指定多少项服务,以及允许使用多少计划来回答查询? – 2011-01-19 02:11:16
还有什么可以帮到的? – Moriarty 2011-01-19 02:24:18