0

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 |
+---------------------------------+--------------------------+--------------+-------------+---------------------+---------------------+---------------------+--------+
Rick James
80.7k5 gold badges52 silver badges119 bronze badges
asked Nov 5, 2018 at 6:38
3
  • 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-*) Commented Nov 5, 2018 at 8:49
  • As I understand the maximum count of aliases for single accesspolicy is not limited. Is it? Commented Nov 5, 2018 at 8:57
  • no it's not, but lets assume that I limit to 10. Commented Nov 5, 2018 at 9:55

1 Answer 1

0

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.

answered Nov 6, 2018 at 4:53

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.