1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS `test`
--------------
--------------
CREATE TABLE `test`
( `id` integer unsigned not null auto_increment primary key,
`code` char(03) not null,
`mess` varchar(255) not null,
`lien` integer unsigned null default null
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
DROP TRIGGER IF EXISTS `anagramme`
--------------
--------------
CREATE TRIGGER `anagramme`
BEFORE INSERT ON `test`
FOR EACH ROW
BEGIN
declare _lien integer unsigned;
set _lien = coalesce((select max(id)+1 from test), 1);
select id from test where substring(code,1,1) = substring(new.code,1,1) and substring(code,2,1) = substring(new.code,3,1) and substring(code,3,1) = substring(new.code,2,1) and id < _lien into _lien;
select id from test where substring(code,1,1) = substring(new.code,2,1) and substring(code,2,1) = substring(new.code,1,1) and substring(code,3,1) = substring(new.code,3,1) and id < _lien into _lien;
select id from test where substring(code,1,1) = substring(new.code,2,1) and substring(code,2,1) = substring(new.code,3,1) and substring(code,3,1) = substring(new.code,1,1) and id < _lien into _lien;
select id from test where substring(code,1,1) = substring(new.code,3,1) and substring(code,2,1) = substring(new.code,1,1) and substring(code,3,1) = substring(new.code,2,1) and id < _lien into _lien;
select id from test where substring(code,1,1) = substring(new.code,3,1) and substring(code,2,1) = substring(new.code,2,1) and substring(code,3,1) = substring(new.code,1,1) and id < _lien into _lien;
set new.lien = _lien;
END
--------------
--------------
insert into `test` (`code`,`mess`) values
('bac', 'Descriptif de BAC'),
('cas', 'Descriptif de CAS'),
('abc', 'Descriptif de ABC'),
('cul', 'Descriptif de CUL'),
('blo', 'Descriptif de BLO'),
('cab', 'Descriptif de CAB'),
('luc', 'Descriptif de LUC'),
('cba', 'Descriptif de CBA'),
('sac', 'Descriptif de SAC'),
('acb', 'Descriptif de ACB'),
('bol', 'Descriptif de BOL'),
('bca', 'Descriptif de BCA'),
('lob', 'Descriptif de LOB')
--------------
--------------
select * from `test`
--------------
+----+------+-------------------+------+
| id | code | mess | lien |
+----+------+-------------------+------+
| 1 | bac | Descriptif de BAC | 1 |
| 2 | cas | Descriptif de CAS | 2 |
| 3 | abc | Descriptif de ABC | 1 |
| 4 | cul | Descriptif de CUL | 4 |
| 5 | blo | Descriptif de BLO | 5 |
| 6 | cab | Descriptif de CAB | 1 |
| 7 | luc | Descriptif de LUC | 4 |
| 8 | cba | Descriptif de CBA | 1 |
| 9 | sac | Descriptif de SAC | 2 |
| 10 | acb | Descriptif de ACB | 1 |
| 11 | bol | Descriptif de BOL | 5 |
| 12 | bca | Descriptif de BCA | 1 |
| 13 | lob | Descriptif de LOB | 5 |
+----+------+-------------------+------+
--------------
select group_concat(mess order by code separator ' - ') as mess
from test as t1
group by lien
--------------
+-----------------------------------------------------------------------------------------------------------------------+
| mess |
+-----------------------------------------------------------------------------------------------------------------------+
| Descriptif de ABC - Descriptif de ACB - Descriptif de BAC - Descriptif de BCA - Descriptif de CAB - Descriptif de CBA |
| Descriptif de CAS - Descriptif de SAC |
| Descriptif de CUL - Descriptif de LUC |
| Descriptif de BLO - Descriptif de BOL - Descriptif de LOB |
+-----------------------------------------------------------------------------------------------------------------------+
--------------
select distinct group_concat(t2.mess order by t2.code separator ' - ') as mess
from test as t1
left outer join ( select concat(substring(code,1,1),substring(code,2,1),substring(code,3,1)) as ref, code, mess from test union
select concat(substring(code,1,1),substring(code,3,1),substring(code,2,1)) as ref, code, mess from test union
select concat(substring(code,2,1),substring(code,1,1),substring(code,3,1)) as ref, code, mess from test union
select concat(substring(code,2,1),substring(code,3,1),substring(code,1,1)) as ref, code, mess from test union
select concat(substring(code,3,1),substring(code,1,1),substring(code,2,1)) as ref, code, mess from test union
select concat(substring(code,3,1),substring(code,2,1),substring(code,1,1)) as ref, code, mess from test
) as t2
on t2.ref = t1.code
group by t2.ref
--------------
+-----------------------------------------------------------------------------------------------------------------------+
| mess |
+-----------------------------------------------------------------------------------------------------------------------+
| Descriptif de ABC - Descriptif de ACB - Descriptif de BAC - Descriptif de BCA - Descriptif de CAB - Descriptif de CBA |
| Descriptif de BLO - Descriptif de BOL - Descriptif de LOB |
| Descriptif de CAS - Descriptif de SAC |
| Descriptif de CUL - Descriptif de LUC |
+-----------------------------------------------------------------------------------------------------------------------+
--------------
drop table if exists `anagramme`
--------------
--------------
create table `anagramme` as
select max(code_1) as code_1,
max(mess_1) as mess_1,
max(code_2) as code_2,
max(mess_2) as mess_2,
max(code_3) as code_3,
max(mess_3) as mess_3,
max(code_4) as code_4,
max(mess_4) as mess_4,
max(code_5) as code_5,
max(mess_5) as mess_5,
max(code_6) as code_6,
max(mess_6) as mess_6
from ( select case rang when 1 then code else '' end as code_1,
case rang when 1 then mess else '' end as mess_1,
case rang when 2 then code else '' end as code_2,
case rang when 2 then mess else '' end as mess_2,
case rang when 3 then code else '' end as code_3,
case rang when 3 then mess else '' end as mess_3,
case rang when 4 then code else '' end as code_4,
case rang when 4 then mess else '' end as mess_4,
case rang when 5 then code else '' end as code_5,
case rang when 5 then mess else '' end as mess_5,
case rang when 6 then code else '' end as code_6,
case rang when 6 then mess else '' end as mess_6,
lien_1
from ( select *,
count(lien_2)+1 as rang
from ( select t1.code as code,
t1.mess as mess,
t1.lien as lien_1,
t2.lien as lien_2
from test as t1
left outer join test as t2
on t2.lien = t1.lien
and t2.code < t1.code
order by t1.lien, t1.code
) as x
group by lien_1, code
) as y
) as z
group by lien_1
--------------
--------------
select * from `anagramme`
--------------
+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+
| code_1 | mess_1 | code_2 | mess_2 | code_3 | mess_3 | code_4 | mess_4 | code_5 | mess_5 | code_6 | mess_6 |
+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+
| abc | Descriptif de ABC | acb | Descriptif de ACB | bac | Descriptif de BAC | bca | Descriptif de BCA | cab | Descriptif de CAB | cba | Descriptif de CBA |
| cas | Descriptif de CAS | sac | Descriptif de SAC | | | | | | | | |
| cul | Descriptif de CUL | luc | Descriptif de LUC | | | | | | | | |
| blo | Descriptif de BLO | bol | Descriptif de BOL | lob | Descriptif de LOB | | | | | | |
+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+--------+-------------------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 1
--------------
Appuyez sur une touche pour continuer... |
Partager