Избегайте, чтобы несколько ОСТАВИЛИ СОЕДИНЕНИЕ

Существует ли способ постараться не добавлять второе ОСТАВЛЕННОЕ СОЕДИНЕНИЕ для таблицы "social_mcouple" для запросов где social_members.m_id = social_mcouple.c_id ниже?

$res = @mysql_query("SELECT *, DATE_FORMAT(m_lld,'%m/%d/%y') AS m_lld_formatted FROM social_members 
        LEFT JOIN social_member_types ON t_id=m_type WHERE m_user='".$en['user']."'");
1
задан acctman 21 April 2010 в 16:44
поделиться

1 ответ

Если всегда будет social_mcouple , который соответствует social_members , или вас интересуют только строки, в которых есть соответствие, тогда вы можете использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Если вам нужны все social_members, независимо от того, есть ли соответствующая social_mcouple , тогда вам понадобится LEFT JOIN. LEFT JOIN предоставит вам все строки с social_mcouple. * , установленным на NULL , где нет совпадений.

Падение производительности действительно будет зависеть от размера ваших наборов данных.

РЕДАКТИРОВАТЬ: добавление образца запроса UNION.

$res = @mysql_query("
(SELECT social_members.*, social_member_types.*, DATE_FORMAT(m_lld,'%m/%d/%y') AS m_lld_formatted,
  NULL AS mcouple1, NULL AS mcouple2, NULL AS mcouple3
FROM social_members 
LEFT JOIN social_member_types ON t_id=m_type
WHERE m_user='".$en['user']."' AND m_type != 2)

UNION

(SELECT social_members.*, social_member_types.*, DATE_FORMAT(m_lld,'%m/%d/%y') AS m_lld_formatted,
    social_mcouple.mcouple1, social_mcouple.mcouple2, social_mcouple.mcouple3
FROM social_members 
LEFT JOIN social_member_types ON t_id=m_type
     JOIN social_mcouple ON social_members.m_id = social_mcouple.c_id
WHERE m_user='".$en['user']."' AND m_type = 2)
");
2
ответ дан 3 September 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: