Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql-如果值存在于另一个表中,则更改返回值_Php_Mysql - Fatal编程技术网

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

Php MySql-如果值存在于另一个表中,则更改返回值,php,mysql,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->

我正在使用
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;
}
项目id也可以出现在另一个表中,即“转售”表中。在这种情况下,用户id将更改。下面是转售表

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

因此,我需要更改函数来检查商品id是否显示在转售表中,然后只获取最新的用户id,因为它可能会被转售多次。除了进行第二次查询外,更改函数的最佳方法是什么?

您可以使用MySQL
连接

项目
表与
转售
表连接,然后以最高的
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

您可以使用MySQL
连接

项目
表与
转售
表连接,然后以最高的
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

使用左连接

$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");

使用左连接

$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");

因此,根据示例转售表,最新用户id是否为1?因此,根据示例转售表,最新用户id是否为1?是,但是如果
转售
表中没有条目怎么办?原始项目添加到
项目
表中。然后它将被包括在
转售
表中(可选)。。。它不会一直在那里。因此,查询应该检查
item\u id
是否存在于
resall
表中,然后获取最新的
user\u id
。您现在使用的方式无法从
items
表中获取用户id。正确吗?我想应该是左连接,并从两个表中选择用户id字段。如果r.user\u id为空,则没有经销商,您将使用i.user\u id.Ohh!在这种情况下,我们可以使用@VolkerK建议的左连接。将更新我的帖子。很好。。。它起作用了。那太好了!谢谢。是的,但是如果
转售
表中没有条目怎么办?原始项目添加到
项目
表中。然后它将被包括在
转售
表中(可选)。。。它不会一直在那里。因此,查询应该检查
item\u id
是否存在于
resall
表中,然后获取最新的
user\u id
。您现在使用的方式无法从
items
表中获取用户id。正确吗?我想应该是左连接,并从两个表中选择用户id字段。如果r.user\u id为空,则没有经销商,您将使用i.user\u id.Ohh!在这种情况下,我们可以使用@VolkerK建议的左连接。将更新我的帖子。很好。。。它起作用了。那太好了!非常感谢。