+----+-----+------------+
|col1|col2 |col3 |
+----+-----+------------+
|A |one |1-jul-2013 |
|A |two |2-jul-2013 |
|A |three|3-jul-2013 |
|A |four |4-jul-2013 |
|A |five |5-jul-2013 |
|B |one |1-jul-2013 |
|B |two |2-jul-2013 |
|B |three|3-jul-2013 |
|B |four |4-jul-2013 |
|B |five |5-jul-2013 |
|B |six |6-jul-2013 |
|B |seven|7-jul-2013 |
|B |eight|8-jul-2013 |
|C |one |1-jul-2013 |
|C |two |2-jul-2013 |
|C |three|3-jul-2013 |
|C |four |4-jul-2013 |
|C |five |5-jul-2013 |
|D |one |1-jul-2013 |
|D |two |2-jul-2013 |
|D |three|3-jul-2013 |
|D |four |4-jul-2013 |
|D |five |5-jul-2013 |
+----+-----+------------+
Я хотел бы, чтобы дисплей выглядел так:
+-----+------+------------+------------+------------+
|Group|Name |Date |Name |Date |
+-----+------+------------+------------+------------+
| A |one |1-jul-2013 |two |2-jul-2013 |
| B |one |1-jul-2013 |two |2-jul-2013 |
| C |one |1-jul-2013 |two |2-jul-2013 |
| D |one |1-jul-2013 |two |2-jul-2013 |
+-----+------+------------+------------+------------+
Зачем тебе это?
Наличие одинаковых имен столбцов рядом друг с другом затрудняет определение того, какой вам нужен.
Насколько я знаю, невозможно иметь повторяющиеся имена столбцов.
Я предполагаю, что вам нужны все записи вместе для значения col1, а не конкретные столбцы, возвращаемые для каждого значения.
Если так, используя GROUP_CONCAT: —
SELECT col1, GROUP_CONCAT(CONCAT_WS('-', col2, col3) SEPARATOR ':')
FROM some_table
GROUP BY col1
Если вы хотите, чтобы это было немного легче обрабатывать, а ваши данные довольно просты, вы можете создать возвращенный конкатенированный столбец как JSON-кодированный массив (и поэтому можете просто использовать JSON_DECODE, чтобы превратить его в массив для обработки в PHP): —
$sql = "SELECT col1, CONCAT('{\"', CONCAT('{\\\"', GROUP_CONCAT(CONCAT_WS('\\\":\\\"', col2, col3) SEPARATOR '\\\",\\\"') ,'\\\"}')
FROM some_table
GROUP BY col1";
Если вы действительно хотите что-то в имеющемся формате (и игнорируете несколько столбцов с одним и тем же именем), то вы можете использовать и IF для проверки значения столбцов, чтобы решить, следует ли возвращать другое значение столбцов, и агрегатную функцию, чтобы просто принудительно установить одно значение должен быть возвращен для этого столбца: —
SELECT col1,
'one',
MAX(IF(col2='one', col3, NULL)),
'two',
MAX(IF(col2='two', col3, NULL)),
'three',
MAX(IF(col2='three', col3, NULL)),
'four',
MAX(IF(col2='four', col3, NULL)),
'five',
MAX(IF(col2='five', col3, NULL)),
'six',
MAX(IF(col2='six', col3, NULL)),
'seven',
MAX(IF(col2='seven', col3, NULL)),
'eight',
MAX(IF(col2='eight', col3, NULL))
FROM some_table
GROUP BY col1