Существует ли способ постараться не добавлять второе ОСТАВЛЕННОЕ СОЕДИНЕНИЕ для таблицы "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']."'");
Если всегда будет 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)
");