Birden LEFT JOIN kaçının

1 Cevap php

İkinci SOL altında burada social_members.m_id = social_mcouple.c_id sorgulamak için masa "social_mcouple" için JOIN ekleyerek önlemek için bir yolu var mı?

$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 Cevap

Daima bir social_mcouple o social_members karşılık, veya Eğer bir INNER JOIN kullanabilirsiniz bir yazışma olduğu satırlar sadece ilgilendiğiniz olacak olursa. Ne olursa olsun orada olup olmadığını tüm social_members gerekiyorsa social_mcouple daha sonra JOIN bir LEFT gerekir karşılık. LEFT JOIN sana social_mcouple.* NULL bir maç yok burada ayarlanmış olan tüm satırları verecektir.

Performans isabet gerçekten veri setlerinin büyüklüğüne bağlıdır.

EDIT: örnek bir UNION sorgusu ekledi.

$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)
");