I have e-mail aliases tables that looks like this:
+---------------------------------+--------------------------+-------------------------+-------------+---------------------+---------------------+---------------------+--------+
| address | name | accesspolicy | domain | created | modified | expired | active |
+---------------------------------+--------------------------+-------------------------+-------------+---------------------+---------------------+---------------------+--------+
| [email protected] | User1 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User1 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
| [email protected] | User2 Frist_LastName | [email protected] | domain2.com | 1970年01月01日 01:01:01 | 1970年01月01日 01:01:01 | 9999年12月31日 00:00:00 | 1 |
+---------------------------------+--------------------------+-------------------------+-------------+---------------------+---------------------+---------------------+--------+
I'm looking how can create (select / create view) result outcome that looks something like this:
+---------------------------------+--------------------------+--------------+-------------------------+-------------------------+-------------------------+-------------------------+--------+
| accesspolicy | name | domain | alias1 | alias2 | alias3 | alias4 | active |
+---------------------------------+--------------------------+--------------+-------------------------+-------------------------+-------------------------+-------------------------+--------+
| [email protected] | User1 Frist_LastName | domain.com | [email protected] | [email protected] | [email protected] | [email protected] | 1 |
| [email protected] | User1 Frist_LastName | domain2.com | [email protected] | [email protected] | [email protected] | NULL | 1 |
| [email protected] | User2 Frist_LastName | domain.com | [email protected] | [email protected] | [email protected] | NULL | 1 |
| [email protected] | User2 Frist_LastName | domain2.com | [email protected] | [email protected] | [email protected] | [email protected] | 1 |
+---------------------------------+--------------------------+--------------+-------------+---------------------+---------------------+---------------------+--------+
-
It's MySQL 5.7.24 server. and I need to create a view table for e-mail server (sogo). In all the cases active=1 if not record is deleted but for table view the column is not required. In the view tables required columns are (accesspolicy, name, domain, alias 1-2-3-4-5-6-7-*)Saulius– Saulius2018年11月05日 08:49:23 +00:00Commented Nov 5, 2018 at 8:49
-
As I understand the maximum count of aliases for single accesspolicy is not limited. Is it?Akina– Akina2018年11月05日 08:57:27 +00:00Commented Nov 5, 2018 at 8:57
-
no it's not, but lets assume that I limit to 10.Saulius– Saulius2018年11月05日 09:55:57 +00:00Commented Nov 5, 2018 at 9:55
1 Answer 1
Think about the next solution. You use the query:
SELECT accesspolicy, name, domain, GROUP_CONCAT(DISTINCT address) all_aliases
FROM source_table
GROUP BY accesspolicy, name, domain
Additionally you may add ORDER BY clause into GROUP_CONCAT if needed.
Its output looks like:
+--------------------------+-----------------------+--------------+-------------------------------------------------------------------------------------------------+
| accesspolicy | name | domain | all_aliases |
+--------------------------+-----------------------+--------------+-------------------------------------------------------------------------------------------------+
| [email protected] | User1 Frist_LastName | domain.com | [email protected],[email protected],[email protected],[email protected] |
| [email protected] | User1 Frist_LastName | domain2.com | [email protected],[email protected],[email protected] |
| [email protected] | User2 Frist_LastName | domain.com | [email protected],[email protected],[email protected] |
| [email protected] | User2 Frist_LastName | domain2.com | [email protected],[email protected],[email protected],[email protected] |
+--------------------------+-----------------------+--------------+-------------------------------------------------------------------------------------------------+
Then, on the client side, you may (if needed) split the all_aliases
column to separate columns. For to know the number of columns which you need to create in output grid you may previously ask it with the query:
SELECT MAX(cnt) columns_count
FROM ( SELECT COUNT(DISTINCT address)
FROM source_table
GROUP BY accesspolicy, name, domain ) x
If a combination (accesspolicy, name, domain, address)
is unique (checked by unique index) you may remove DISTINCTs.