On 4/22/07, Christian High <[EMAIL PROTECTED]> wrote:


 On 4/22/07, YL <[EMAIL PROTECTED]> wrote:
>
> I have a contact table looks like
>
> id     type         owner_id    owner_type       value
> 11    email        21             person               [EMAIL PROTECTED]
> 12    phone       21             person              303-777-8888
> 13    PO Box    18             business           220
> 14    cell           21             person              101-202-3344
> .........
>
> The reason for such a table is that I get room for any kind of contact
> info. even future ones.
>
> For practical reasons, I need a view from the above to contain only the
> following info
>
> owner_id    email    phone
>
>
> such that the owner_type = 'person' and column owner_id has no
> duplications
>
> what the sql should be to create such a view?
>
> thanks a lot



 As far as I know you will need 3 views to accomplish this
view 1 will get the phone number and owner id together and the create
statement should look like this

CREATE VIEW contact_phone AS
SELECT owner_id, value as phone_number
FROM contact_info
WHERE `type` = 'phone';

view 2 will get the owner_id and the phone number together and should look
like this

CREATE VIEW contact_email AS
SELECT owner_id, value as email_address
FROM contact_info
WHERE type = 'email';

view 3 will pull the owner_id, email_address, and phone_number together in
one row and should look like this

CREATE VIEW contact_view AS
SELECT contact_phone.owner_id, contact_phone.phone_number as phone_number,
contact_email.email_address as email_address
FROM contact_phone
JOIN contact_email ON
(contact_phone.owner_id = contact_email.owner_id);

CJ

 of course i forgot that you wanted only owner_type personal so just add
that to the end of the WHERE clause on the contact_phone and contact_email
views like


AND owner_type = 'personal'

CJ

Reply via email to