mysql查询,用于从不同的表中获取建议连接的相关数据

时间:2012-01-10 12:22:39

标签: php mysql social-networking

我们正在开发具有不同概念的社交网站的门户网站......但是为了建议连接,我们在mysql查询中遇到了... 我们正试图让用户使用similat数据...

SELECT u.* 
    FROM educonnect_user u 
    LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
    LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
WHERE q.type_of_institution in 
        (
            SELECT type_of_institution 
            FROM educonnect_user_qualification qi 
            WHERE qi.user_id = 3
         ) 
      AND q.college in 
         (
             select college 
             from educonnect_user_qualification qc 
             where qc.user_id = 3
          ) 
      AND q.country in 
          (
             select country 
             from educonnect_user_qualification qco 
             where qco.user_id = 3
          ) 
      AND a1.country in 
          (
             select country 
             from educonnect_user_contact cc 
             where cc.user_id = 3
          ) 
      AND a1.state in 
          (
             select state 
             from educonnect_user_contact cs 
             where cs.user_id = 3
          )

像这样我加入10个表..但是问题出在我给AND运算符的地方没有生成结果,如果我给OR运算符它返回所有用户..这些运算符的逻辑给出我知道的输出。但是对于这个问题我需要不同的建议才能有效地工作..否则查询可以用任何其他特定的操作符改变???

2 个答案:

答案 0 :(得分:0)

您不需要所有这些WHERE IN条件。您只需要where educonnect_user.user_id = 3,因为educonnect_user表与其他两个表educonnect_user_qualificationeduconnect_user_contact一起加入,因此加入将确保为id=3用户提供字段:type_of_institutioncollegecountry,..(和其他字段)存在于同一用户的其他两个表中,但您需要关心的是什么类型的连接根据您要从表格中选择的字段,您需要Leftright。所以我认为以下查询您正在寻找的内容:

SELECT u.* 
FROM educonnect_user u 
LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
where u.user_id = 3

答案 1 :(得分:0)

希望这会有所帮助::

SELECT u.* 
    FROM educonnect_user u 
    LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
    LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
    left join educonnect_user_qualification qi on (q.type_of_institution=qi.type_of_institution and qi.user_id=3)
  left join educonnect_user_qualification qc  on (q.college=qc.college and qc.user_id=3)
  left join educonnect_user_qualification qco on (q.country=qco.country and qco.user_id=3)
  left join educonnect_user_contact cc on (a1.country=cc.country and cc.user_id=3)
  left join educonnect_user_contact cs on (a1.state=cs.state and cs.user_id=3)