Bu MySQL iyi fikir sorgulamak mı?

2 Cevap php

Ben üzerinde çalışıyorum proje hesaplarının, "insanlar" ve "şirket" iki türü vardır. Ben tüm hesapları ve giriş için gerekli, sadece temel bilgi (e-posta, vb pass) ve iki diğer tablolar "user_profiles" (normal insanlar ile tek bir "users" tablo tutun Bir "{[(4)] ile her bir tipi için daha özel bir sütun sahip) ve" {[(2) "}] (şirketler), genel bağlantılı tablo" users "tablosu hem de } "sütunu.

Now, the problem: whenever I want to list users that can be both people and companies, I use a: "select user_id, user_type, concat_ws('', concat_ws(' ', user_profiles.profile_first_name, user_profiles.profile_last_name), company_profiles.profile_company_name) as user_fullname ". When I list these users I know whether they're people or companies by the "user_type".

Benim yaklaşım doğru (en uygun) bir concat_ws kullanıyor? Ben bunun yerine select-ing bu yaptım her *_name gereğinden fazla sütunları dönen önlemek için.

Herhangi protips :) çok açığız.

Teşekkürler

EDIT: Sorgu yukarıdaki gibi devam ediyor: from users left join user_profiles on ... left join company_profiles on ...

2 Cevap

select u.user_id, u.user_type, concat_ws(profile_first_name + profile_last_name) as full_name from users u, user_profiles up where u.key = up.key and u.user_type = 'user'

sendika

select u.user_id, u.user_type, concat_ws(profile_first_name + profile_last_name) as full_name from users u, company_profiles cp where u.key = cp.key and u.user_type = 'company'

Sorgu zaten iş var mı? O zaten bu yaklaşımı kullanarak performans sorunları yaşıyorsanız mi?

Yukarıdaki sorgu bu bilgileri çağıran yazılım sorunları siz olmak bekliyorsanız daha yol uzun sürüyor ya da neden kullanılarak sürece, bu olabilir önceden olgun optimizasyon.

Unutulmaması gereken bir şey, CONCAT_WS sizin ilk kullanımı bir seperatörünü sahip değildir, bu nedenle şirket adı kişinin adı ile birleşti olacak.