Этот запрос MySQL - лучшая идея? - PullRequest
1 голос
/ 07 декабря 2008

В проекте, над которым я работаю, есть два типа учетных записей: "people" и "companies".

У меня есть одна таблица "users" со всеми учетными записями и только основной информацией, необходимой для входа в систему (электронная почта, пароль и т. Д.), И две другие таблицы "user_profiles" (обычные люди) и "company_profiles "(компании), которые содержат более конкретные столбцы для каждого типа, обе таблицы связаны с общей таблицей" users "через столбец" profile_user_id ".

Но всякий раз, когда я хочу перечислить пользователей, которые могут быть как людьми, так и компаниями, я использую:

"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".

Когда я перечисляю этих пользователей, я знаю, являются ли они людьми или компаниями по "user_type".

Является ли мой подход с использованием concat_ws правильным (оптимальным)? Я сделал это вместо select -ing каждые *_name, чтобы избежать возврата большего количества столбцов, чем необходимо.

Спасибо

РЕДАКТИРОВАТЬ: запрос выше продолжается как: from users left join user_profiles on ... left join company_profiles on ...

Ответы [ 2 ]

5 голосов
/ 07 декабря 2008
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'

union

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'
1 голос
/ 07 декабря 2008

Работает ли у вас запрос? Это то, что вы уже испытываете проблемы с производительностью при использовании этого подхода?

Если использование вышеуказанного запроса занимает больше времени, чем вы ожидаете, или не вызывает проблем в программном обеспечении, вызывающем эту информацию, это может быть преждевременной оптимизацией.

Следует отметить, что при первом использовании CONCAT_WS не было разделителя, поэтому название компании будет объединено с именем человека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...