-1

天哪,这太烦人了。我有一个带有收件箱、发件箱和对话视图的消息系统。对话视图显示与特定用户发送和接收的消息,并且由于我只使用一个表来处理消息(sender_status/receiver_status 来控制消息中涉及的哪些用户已将其删除、阅读等)

我的列表旁边有一个复选框,每条消息一个,它在我的收件箱和发件箱查询中都可以正常工作:

<input type="checkbox" name="message_delete[]" value="<?= $message['mid']; ?>"/>

当我尝试在对话视图中删除时,我需要将 messageupdate 应用到正确的状态:正常查询,即收件箱,工作正常:

$questionmarks = str_repeat("?,", count($mid_array) - 1) . "?";
$st = $db->prepare("UPDATE messages SET sender_status = 'DELETED' WHERE mid IN ($questionmarks)");
            $st->execute($mid_array);

对话查询,不起作用:

$st = $db->prepare("UPDATE messages SET (receiver_status = 'DELETED' WHERE mid IN        ($questionmarks) AND to_user = '{$user_id}'), (sender_status = 'DELETED' WHERE mid IN ($questionmarks) AND from_user = '{$user_id}')");
            $st->execute( WHAT TO PUT HERE );

我在我认为可行的执行中尝试了 array($mid_array, $mid_array) 。还有其他几个我无法工作的有点愚蠢的解决方案。我可能在这里错过了一些简单的功能,但我尝试过的功能都没有,因此我的问题。需要帮忙!!提前致谢。

4

2 回答 2

1

尝试更多类似的东西

UPDATE messages
SET
    receiver_status = 'DELETED',
    sender_status = 'DELETED'
WHERE mid IN ($questionmarks) AND ('$user_id' IN (to_user, from_user))

解决原始查询中的多个where问题。


SET
   receiver_status = IF(to_user   = '$user_id', 'DELETED', receiver_status),
   sender_status   = IF(from_user = '$user_id', 'DELETED', sender_status)
WHERE mid IN ($questionmarks)

相反,然后呢?

于 2013-02-21T15:26:29.343 回答
0

哇。
无论有没有准备好的陈述,你都无法做到这一点。
它是 SQL 语法,而不是 PDO。

因此,只需使用 2 个单独的数据集运行 2 个单独的查询。

顺便说一句,由于某种原因,您没有在查询中使用占位符 - 所以,您处于危险之中。

于 2013-02-21T15:30:44.400 回答