2014-02-05 2 views
1

может кто-нибудь мне помочь в этом ...присоединиться к двум столам с помощью стержня

У меня есть две таблицы.

user_info (имя пользователя, Имя, фамилия, адрес) И user_contact (имя пользователя, номер, первичный, заместитель)

пример полей в user_contacts
('ABC', ххх-xxx- хххх, 1,0)
('ABC', ххх-XXX-XXXX, 0,1)
('ABC', ххх-XXX-XXXX, 0,1)
('ABC', XXX-XXX -xxxx, 0,1)
('def', xxx-xxx-xxxx, 1,0)
('Защита', ххй-XXX-XXXX, 0,1)
('Защита', хая-XXX-XXXX, 0,1)

это означает, что пользователь может иметь более одного альтернативный телефон номера.

то, что я хочу сделать, это соединить две таблицы, и получить результат, как,
(имя пользователя, первичный номер, альтернативный num1, альтернативный num2, альтернативный num3 ..)

То, что я так далеко это, но это может дать мне только 1 альтернативное число и не все.

select username,firstname,lastname,address, 
     sum(if(c.primary=1,c.number,NULL) as primary, 
     sum(if(c.alternate=1,c.number,NULL) as alternate 
from user_info as i left join 
    user_contact as c 
    on i.username = c.username 
group by username 

Поблагодарите за помощь. Я читал в сводные таблицы, но я не мог найти что-то, что отвечает моим сомнениям.

Спасибо их

+0

Рассмотрим обработку вопросов отображения данных в коде уровня представления/прикладного уровня (например, простой PHP цикл воздействуя на упорядоченном массиве) – Strawberry

+0

я согласен, я сделал это с помощью PHP, но я должен использовать MySQL для этого. – Aman

ответ

0

Спасибо всем, кто пытался решить эту проблему для меня. Я понял ответ на него. Если вам интересно, это идет этот путь

select username, firstname,lastname,address, 
max(if(uc.`primary`=1 AND uc.row_num=1, uc.number,0)) as phone, 
max(if(uc.row_num=2, uc.number,0)) as alt1, 
max(if(uc.row_num=3, uc.number,0)) as alt2, 
max(if(uc.row_num=4, uc.number,0)) as alt3, 
max(if(uc.row_num=5, uc.number,0)) as alt4 
from user_info as ui 
left join 
(
Select username, number,`primary`,alternate, 
    if(@type = username,@rowNum:[email protected]+1,@rowNum:=1) as row_num, 
    @type := username as `type` 
from user_contact , (select @rowNum:=0 , @type:='') as r 
group by username, number 
order by username, `primary` desc 
) as uc 
on ui.username = uc.username 
order by username 
Смежные вопросы