PHP-Mysql选择和或

PHP-Mysql选择和或,php,mysql,Php,Mysql,我有一个PM系统,用户可以在这里相互书写。当我显示MySQL表中的可用PM时,deleted\u sender和deleted\u receiver 如果deleted\u发送者为1,则发送PM的人应该无法在列表中看到它。如果deleted\u接收器为1,则接收PM的人应无法看到它 我的问题是,如何使用mysql查询实现这一点?目前我有: $r=mysql_query(" SELECT * FROM private_messages WHERE

我有一个PM系统,用户可以在这里相互书写。当我显示MySQL表中的可用PM时,
deleted\u sender
deleted\u receiver

如果
deleted\u发送者
为1,则发送PM的人应该无法在列表中看到它。如果
deleted\u接收器
为1,则接收PM的人应无法看到它

我的问题是,如何使用mysql查询实现这一点?目前我有:

$r=mysql_query("
         SELECT * FROM private_messages 
         WHERE 
           sender_id='".$userdata['id']."' 
         OR 
           receiver_id='".$userdata['id']."' 
         AND 
           (deleted_receiver='0' OR deleted_sender='0')");

尽管如此,这只是在发送方和接收方都显示PM。

好吧,想想你想做什么:如果发送方没有删除它,你想向发送方显示它,反之亦然

换句话说,您希望显示if
(发送方=用户且发送方未删除)或(接收方=用户且接收方未删除)

您可以从中构建查询:

。。。其中(`sender\u id`={$userdata['id']}和`deleted\u sender`=0)
或者(`receiver\u id`={$userdata['id']}和`deleted\u receiver`=0)

好吧,想想你想做什么:如果发送方没有删除它,你想向发送方展示它,反之亦然,接收方也一样

换句话说,您希望显示if
(发送方=用户且发送方未删除)或(接收方=用户且接收方未删除)

您可以从中构建查询:

。。。其中(`sender\u id`={$userdata['id']}和`deleted\u sender`=0)
或者(`receiver\u id`={$userdata['id']}和`deleted\u receiver`=0)
此外,这可能会导致无效结果,因为您不知道您的结果是关于发送还是接收。。。取决于您喜欢的显示器。但你可能需要提出两个不同的要求


此外,这可能会导致无效结果,因为您不知道您的结果是关于发送还是接收。。。取决于您喜欢的显示器。但您可能需要提出两个不同的请求。

我不确定您为什么要编写单个查询,因为发送者和接收者都是独立的实体,您只想向其中任何一个显示结果。如果已为发件人删除,则不通过“向收件人显示”向发件人显示。因此,只为发送者或接收者设置一个条件。检查
$userdata['id']
是否为发送者,然后使用
deleted\u sender=0查询接收者,反之亦然。我不确定为什么要编写单个查询,请参见发送者或接收者都是单独的实体,您只想向其中任何一个显示结果。如果已为发件人删除,则不通过“向收件人显示”向发件人显示。因此,只为发送方或接收方设置一个条件。检查
$userdata['id']
是否为发送方,然后使用
已删除\u发送方=0
查询接收方,反之亦然
    $r = mysql_query(
"SELECT * FROM private_messages 
WHERE (sender_id='".$userdata['id']."' AND deleted_sender='0') 
OR (receiver_id='".$userdata['id']."' AND deleted_receiver='0')"
);