Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Mysql 在联合查询中获取id_Mysql_Sql - Fatal编程技术网

Mysql 在联合查询中获取id

Mysql 在联合查询中获取id,mysql,sql,Mysql,Sql,我有两张桌子。第一个用于产品,第二个用于订单 p_id | username 02 | Joe 02 | Mike 01 | Joe 03 | Tomy 产品 id |Product name 01 |Computer 02 |Mobile 03 |Tablet 和第二张桌子 p_id | username 02 | Joe 02 | Mike 01 | Joe 03 | Tomy 现在我想向用户展示那些用户尚未购买的产品 假设登录用户名是Mike $

我有两张桌子。第一个用于产品,第二个用于订单

p_id | username

02   | Joe
02   | Mike
01   | Joe
03   | Tomy
产品

id |Product name

01 |Computer
02 |Mobile
03 |Tablet
和第二张桌子

p_id | username

02   | Joe
02   | Mike
01   | Joe
03   | Tomy
现在我想向用户展示那些用户尚未购买的产品 假设登录用户名是Mike

$username = "Mike";
$get = mysqli_query($db, "SELECT e.id 
FROM `products` AS e INNER JOIN `order` AS u ON u.p_id = e.id WHERE e.username != '$username' ");
echo mysqli_num_rows($get);

Result 3;

上面的查询统计用户名不是mike的所有订单,并显示结果。。我只想要那些Mike没有购买的产品列表,你必须进行反加入

SELECT * FROM product p
WHERE NOT EXISTS (
   SELECT 1 FROM order o WHERE o.username = 'Mike' AND p.id = o.p_id
)

有关

的详细信息,您必须执行反加入操作

SELECT * FROM product p
WHERE NOT EXISTS (
   SELECT 1 FROM order o WHERE o.username = 'Mike' AND p.id = o.p_id
)

有关

的更多信息我不确定是否正确理解了您的问题,但我假设您希望这样做:

$notThisUser = "Mike";
$sql = $mysqli->prepare("SELECT productname FROM product 
    WHERE id IN (SELECT p_id FROM order WHERE username != ?)");
$sql->bind_param("s", $notThisUser);
$sql->execute();
$sql->bind_result($productName);

while ($sql->fetch()) {
    echo $productName;
}

我不确定我是否正确理解您的问题,但我假设您希望这样做:

$notThisUser = "Mike";
$sql = $mysqli->prepare("SELECT productname FROM product 
    WHERE id IN (SELECT p_id FROM order WHERE username != ?)");
$sql->bind_param("s", $notThisUser);
$sql->execute();
$sql->bind_result($productName);

while ($sql->fetch()) {
    echo $productName;
}

您应该使用select*FROM product WHERE id NOT IN select p_id FROM order WHERE user_name='Mike'这就是全部

您应该使用select*FROM product WHERE id NOT IN select p_id FROM order WHERE user_name='Mike'这就是您的目标

$username = "Mike";
$selectQuery = "select p.id from product
inner join oder AS o on o.p_id=p.id where o.username <> :username";
$statement = $dbh->prepare($selectQuery);
$statement->bindValue(":username", $username);
$statement->execute();
$data = $statement->fetchAll(\PDO::FETCH_ASSOC);

我想这就是你的目标

$username = "Mike";
$selectQuery = "select p.id from product
inner join oder AS o on o.p_id=p.id where o.username <> :username";
$statement = $dbh->prepare($selectQuery);
$statement->bindValue(":username", $username);
$statement->execute();
$data = $statement->fetchAll(\PDO::FETCH_ASSOC);

了解防止SQL注入的准备语句在查询的WHERE子句中,您有e.username!='$username'但e是products表的别名,但products表没有username列。正确命名别名了解防止SQL注入的准备语句在查询的WHERE子句中,您有e.username!='$username'但e是products表的别名,但products表没有username列。正确命名你的别名为什么,它如何帮助,很好的格式。就这些。事实上,这与我的答案非常接近,因为它是一种反连接类型,但不存在。它的类型较少,因为db不必比较2个值。为什么,它有多大帮助,很好的格式。就这些。这与我的答案非常接近,因为它是一种反连接类型,但不存在,它的类型较少,因为db不必比较2个值。这实际上会非常慢,因为您会选择所有其他用户,这是一个更大的结果,因此,查询规划师必须进行更多的比较这实际上会非常缓慢,因为您会选择所有其他用户,这是一个更大的结果,因此查询规划师必须进行更多的比较,这与原始问题有多大的不同,请记住,这是可转换的=这与最初的问题有什么不同呢?记住,这是可以随时间而改变的=