所以,我有这个MySQL问题。
我一直在关注LEFT JOIN,INNER JOIN等。据我所知LEFT JOIN从左边加入,如果右边部分不存在,则将其值设置为NULL。如果没有匹配的连接,则使用INNER JOIN,返回一个空集。
从我之前的陈述中可以看出,我为比赛中的一个用户加入了不同的统计数据。但是如果uid2不是uid1的朋友,那么在我的情况下,对于朋友的所有字段都会给出null。*
如果他们是朋友,我将如何获取所有朋友字段,如果他们不是friends
,则我没有字段。 (我不想在之前做一个单独的陈述来检查他们是否是朋友)。
这是我以前的状态:
SELECT matches.*, statistics.*, friends.*, users.username
FROM `matches`
LEFT JOIN statistics ON matches.uid1=statistics.uid
LEFT JOIN users ON matches.uid1=users.uid
LEFT JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid
WHERE matches.mid IN (269,231,131)
答案 0 :(得分:1)
然后,您只需将LEFT JOIN
替换为INNER JOIN
:
SELECT matches.*, statistics.*, friends.*, users.username
FROM `matches`
LEFT JOIN statistics ON matches.uid1=statistics.uid
LEFT JOIN users ON matches.uid1=users.uid
INNER JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid
WHERE matches.mid IN (269,231,131);
但是,当friends
表无法连接时,无法有选择地不返回列。
答案 1 :(得分:0)
我最后仍在进行LEFT JOIN,然后过滤结果;
$temp = array_filter($temp, "is_not_null");
function is_not_null($var)
{
return ! is_null($var);
}