MySql - 如果另一个表中存在值,则更改返回值

时间:2015-11-24 10:44:18

标签: php mysql

我使用selectSellerID功能来检索用户的ID。

public function selectSellerID($item_id)
{
    if($q = $this->db->mysqli->prepare("SELECT user_id FROM items WHERE id = ?"))
    {
        $q->bind_param("i", $item_id);
        $q->execute();
        $q->bind_result($id);
        $q->fetch();
        $q->close();

        return $id;
    }
        return false;
}

item_id也可以出现在另一个表中,这是一个转售表。在这种情况下,user_id将更改。下面是转售表。

+----+---------+---------+-------+------+
| id | user_id | item_id | price | date |
+----+---------+---------+-------+------+
|  2 |      18 |      27 |    91 | NULL |
|  3 |       1 |      27 |    90 | NULL |
|  4 |       1 |      27 |    75 | NULL |
+----+---------+---------+-------+------+

所以我需要更改函数以检查item_id是否在转售表中是presend,然后只获取最新的user_id,因为它可能会多次转售。除了进行第二次查询之外,更改功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用MySQL JOINS

items表与resell表联系起来,然后对结果集排序最高id将得到所需的结果。

尝试以下查询:

SELECT IF(r.user_id IS NULL, i.user_id, r.user_id) AS user_id
FROM items i
LEFT JOIN resell r
ON i.id = r.item_id
WHERE i.id = ?
ORDER BY r.id DESC
LIMIT 1

答案 1 :(得分:0)

使用LEFT JOIN

$q = $this->db->mysqli->prepare("SELECT rsl.user_id FROM items itms LEFT JOIN resell rsl ON itms.id = rsl.item_id WHERE itms.id = ? ORDER BY rsl.id DESC LIMIT 1");