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建议的左连接。将更新我的帖子。很好。。。它起作用了。那太好了!非常感谢。