I have three tables in my MySQL database – company
, extra_fields
and extra_fields_info
:
mysql> describe company;
+-----------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+------------------+------+-----+---------+-------+
| company_id | varchar(64) | NO | PRI | NULL | |
| company_name | varchar(80) | YES | | NULL | |
| other_stuff | varchar(1) | YES | | n | |
+-----------------------------+------------------+------+-----+---------+-------+
mysql> describe extra_fields;
+-----------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+------------------+------+-----+---------+-------+
| extra_field_id | varchar(64) | NO | PRI | NULL | |
| field_name | varchar(80) | YES | | NULL | |
| field_required | varchar(1) | YES | | n | |
| field_comment | varchar(255) | YES | | NULL | |
+-----------------------------+------------------+------+-----+---------+-------+
mysql> describe extra_fields_info;
+--------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+-------------+------+-----+---------+-------+
| extra_info_id | varchar(64) | NO | PRI | NULL | |
| company_id | varchar(64) | YES | MUL | NULL | |
| extra_field_id | varchar(64) | YES | | NULL | |
| field_value | text | YES | | NULL | |
+--------------------------+-------------+------+-----+---------+-------+
Here's an example of some of the data from these fields:
mysql> select efi.extra_field_id, ef.field_name, efi.field_value, efi.company_id from extra_fields_info left join extra_fields ef on efi.extra_field_id = ef.extra_field_id;
+----------------+-------------------+--------------------------------+------------+
| extra_field_id | field_name | field_value | company_id |
+----------------+-------------------+--------------------------------+------------+
| 1 | is_affiliate_user | y | 1 |
| 2 | contact_email | email@gmail.com | 1 |
| 3 | default_currency | MYR | 1 |
| 4 | vertical | 33 | 1 |
| 5 | contact_locale | en | 1 |
| 6 | operating_country | MY | 1 |
| 7 | company_name | SomeCompanyName1 | 1 |
| 1 | is_affiliate_user | y | 2 |
| 2 | contact_email | email2@gmail.com | 2 |
| 3 | default_currency | EUR | 2 |
| 4 | vertical | 3 | 2 |
| 5 | contact_locale | en | 2 |
| 7 | contact_name | ContactName | 2 |
| 6 | operating_country | FR | 2 |
+----------------+-------------------+--------------------------------+------------+
What I'd like to do is use some of the rows in the above output as fields in a SELECT. I'd like to visualise my data like this:
+------------+------------------+------------------+-------------------+----------+
| company_id | company_name | contact_email | operating_country | vertical |
+------------+------------------+------------------+-------------------+----------+
| 2 | SomeCompanyName1 | email2@gmail.com | EUR | 3 |
| 1 | | email@gmail.com | MY | 33 |
+------------+------------------+------------------+-------------------+----------+
As you can see, I'm using some of the extra_fields
as field names. I only need to select a few of these fields as depicted above – I don't need all of them.
I'm not even sure where to start with this, so any guidance would be appreciated.
Best Answer
If extra fields types list is static, then
If not, then dynamic SQL only.