SELECT id FROM table WHERE id = $ _ GET ['id'] AND user1 = $ user OR user2 = $ user

时间:2014-07-28 18:31:35

标签: php mysql sql

我正在尝试构建类似的facebook风格的消息传递系统(对话)。

这是对话表。

DESCRIBE conversation;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| c_id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| user_one | int(11)     | NO   |     | NULL    |                |
| user_two | int(11)     | NO   |     | NULL    |                |
| ip       | varchar(30) | NO   |     | NULL    |                |
| time     | int(11)     | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

现在,在用户可以阅读对话之前,我需要检查对话(c_id)是否存在,以及用户是否是给定对话ID的所有者。 撰写此查询的最佳方式是什么?

我所拥有的,不起作用的例子:

$cid = intval($_GET['cid']);

$conv = $this->db->fetchRow('SELECT c_id FROM `conversation` WHERE 
        user_one=? OR 
        user_two=? AND 
        c_id=?', 
        array($this->user->id, $this->user->id, $cid));

if ($conv) {
// get the conversation replies etc..
}

1 个答案:

答案 0 :(得分:1)

我看到了一些问题。

一个是你似乎忽略了AND的优先级高于OR。所以你的条件的逻辑就像你用这样写的方式一样:

WHERE user_one=? OR (user_two=? AND c_id=?)

虽然我猜你想要逻辑以这种方式工作:

WHERE (user_one=? OR user_two=?) AND c_id=?

但是,如果你打算如何工作,我想知道你为什么需要搜索用户id,因为c_id=?上的条件只会选择一行(如果没有匹配则为零行) ,因为它正在搜索一个特定的主键值。