如果列不匹配,则从多个表中选择联接返回null


select from multipe tables join return null if columns not match

我正在尝试创建一个mysql查询,指定userid=x的列和userid=y的其他列。

我的问题是(目前发生的情况),如果用户x选择的列与用户y同一列的内容不匹配,查询将返回null(因为我要检查是否声明了变量,并且只打印其他列的变量…)。

我需要从3个表中选择:成员、朋友和帐户类型:

从members.status(以及名称、月份1-12和照片等其他列)开始1º,其中members.id=$_GET['id']
距离account_type.type 2º我需要比较members.acc_type,其中members.id=$_SESSION['user_id']
3ºfrom friends.cached_month1-12(和列总数)其中friends.friendID=$_GET['id']

如何指定每个列的id属于哪个?

我不知道如何在一个唯一的查询中进行,我可以单独进行。。。

事实上,这就是我所拥有的:

SELECT friends.*, members.*, account_type.* FROM members INNER JOIN friends ON friends.friendID = members.id
                                                              INNER JOIN account_type ON account_type.type = members.acc_type
                                                              WHERE friends.friendID = ? AND members.acc_type = ?")) {
$stmt->bind_param('isi', $_GET['id'], $_SESSION['acc_type'];

从2º就是我遇到这个问题的地方,我选择了一列,我真的需要从哪个id或从哪个行指定,因为有很多帐户具有相同的acc_type,所以如果连接的用户与朋友帐户具有不同的cc_type,则从哪个id指定应该起作用。我的意思是,这个想法是:每个用户,无论acc_type是什么,都可以有不同acc_type的朋友。

我测试过,如果connected user和$_GET['id']user有相同的acc_type,一切都很好,但如果我将acc_type从connected user更改为connected user,则查询将不起作用。

提前感谢!

最后我得到了一个有效的查询(花了我几个小时),这个答案可能对其他人有帮助:

SELECT members.*, account_type.*, friends.*, membersF.*
FROM members
INNER JOIN account_type ON members.acc_type = account_type.type
INNER JOIN friends ON friends.userID = members.id
INNER JOIN members AS membersF ON membersF.id = friends.friendID
WHERE members.acc_type = ?
AND friends.userID = ?
AND membersF.id = ?
$_SESSION['acc_type'], $_SESSION['user_id'], $_GET['id']

有人解释:

INNER JOIN account_type ON members.acc_type = account_type.type

这将返回连接用户的acc_type,并且您将能够打印与该account_type对应的列(除了奖金之外,您可以添加许多列)。

INNER JOIN friends ON friends.userID = members.id

在这里,它将返回该表中与userID相对应的列。

INNER JOIN members AS membersF ON membersF.id = friends.friendID

最后,这将返回与该ID对应的成员的列,在本例中为朋友ID。

仅此而已:)