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

时间:2014-10-07 14:31:00

标签: php mysql

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

我的问题是(当前正在发生的事情)如果用户x中的选定列与来自用户y的同一列的内容不匹配,则查询将返回null(因为我有一个检查 - 如果声明变量和只打印那些来自其他的变量......)。

我需要从3个表中进行选择:成员,朋友和account_type:

从members.status(以及其他列,如name,month1-12和photo)的1º,其中members.id = $ _GET ['id']
来自account_type.type的2º我需要比较members.acc_type,其中members.id = $ _SESSION ['user_id']。
来自friends.cashed_month1-12(和列总数)3º,其中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,因此指定了什么id应该工作如果连接用户与朋友帐户具有不同的acc_type。我的意思是,这个想法是:每个用户,无论acc_type是什么,都可以拥有不同acc_types的朋友。

我测试过,如果连接用户和$ _GET ['id']用户具有相同的acc_type,一切正常,但如果我从连接用户更改acc_type,则查询将无效。

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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。

这就是全部:)