2013-05-03 4 views
1

У меня есть SQL-запрос, чтобы показать данныеКак сгруппировать полевые данные?

"SELECT 
    `artikel`.`foto_naam`, 
    `fotografer`.`id`, 
    `fotografer`.`name_fotografer`, 
    `customer`.`first_name`, 
    `customer`.`last_name`, 
    `fotografer`.`domain_name`, 
    `fotografer`.`email`, 
    `order`.`invoice_no`, 
    `order`.`order_cost`, 
    `order`.`total_cost`, 
    `order`.`invoice_date`, 
    `order`.`payment`, 
    `order`.`status` 
FROM 
    `artikel_group` 
    INNER JOIN `artikel` ON `artikel`.`artikelgroup_id` = `artikel_group`.`id` 
    INNER JOIN `fotografer` ON `artikel_group`.`fotografer_id` = `fotografer`.`id` 
    INNER JOIN `order_has_artikelgroup` ON `order_has_artikelgroup`.`artikelgroup_id` = `artikel_group`.`id` 
    INNER JOIN `order` ON `order`.`id` = `order_has_artikelgroup`.`order_id` 
    INNER JOIN `customer` ON `order`.`customer_id` = `customer`.`id`" 

Результат запроса для моего SQL запроса в btowser я использую рамки PHP CodeIgniter

Name | email   | customer | invoice id| 
Lekto | [email protected] | edwin | 11  | 
Lekto | [email protected] | risa  | 12  | 
Lekto | [email protected] | edwin | 13  | 
heko | [email protected] | pae  | 15  | 
heko | [email protected] | edwin | 16  | 

Как группа полей, как

Name | email   | customer | invoice id| 
Lekto | [email protected] | edwin | 11  | 
     |     | risa  | 12  | 
     |     | edwin | 13  | 
heko | [email protected] | pae  | 15  | 
     |     | edwin | 16  | 

пожалуйста help, чтобы показать запрос, подобный этому

+1

сделать это на уровне приложения ':)' MySQL не поддерживает окна функции (*, который может сделать ваш желаемый результат легким *) –

ответ

1

Нечетный вопрос, но если вам действительно нужно это в MySQL, вы можете использовать USER VARIABLES для установки столбцов Name и email в '' (пустую строку) для подэлементов в списке.

DEMO FIDDLE или, например,

select 
    if(@tName!= Name, if(@'tNAME':= Name, Name,Name) , ''), 
    if(@tEmail!= Email, if(@'tEmail':= Email, Email ,Email) , ''), 
    customer, 
    invoice_id, 
    /* blah blah blah */ 
from 
    tables 
    join (select @'tName':='', @'tEmail':='') T on 1=1 
/* blah blah blah */ 

Я осуществляю join (select @'tName':='') T on 1=1 повторно инициализировать переменную пользователя только в случае, если вы не можете их контролировать.

0

Одна вещь, которую вы можете сделать в mysql, - это обернуть запрос с помощью group by и group_concat(). Что-то вроде этого:

SELECT 
    name, 
    email, 
    group_concat(customer) AS customers, 
    group_concat(invoice_id) AS invoice_ids 
FROM 
    (...query you already have..) 
GROUP BY 
    name, email 

Результат будет выглядеть как-то вроде этого:

name email    customers   invoice_ids 

heko [email protected]  pae,edwin   15,16 
Lekto [email protected]  edwin,risa,edwin 11,12,13 

PLZ SEE FIDDLE

+0

и запрос в php? одна и та же? –

+0

результат запроса pae, edwin с комами, как сделать
? составление списка? –

+0

@EdwinAndrianto Я не знаком с php, но я уверен, что вы можете заменить запятую '
' в php. Очень плохая, но рабочая альтернатива - установить разделитель group_concat на '
': 'group_concat (разделитель invoice_id '
')' – jurgenreza

Смежные вопросы