1

所以,我有这个 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)
4

2 回答 2

1

然后你只需将最后一个替换LEFT JOININNER 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

于 2012-06-02T08:33:09.030 回答
0

我最终还是做了一个 LEFT JOIN,然后过滤了结果;

$temp =  array_filter($temp, "is_not_null");

function is_not_null($var)
{
    return ! is_null($var);
}
于 2012-06-02T11:43:15.900 回答