這似乎是工作確定
設置數據
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