2017-08-03 66 views
0

我有两个表。第一产品和第二订货在联合查询中获取ID

产品

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; 

以上查询计数其中username是不是迈克和显示结果的所有订单..我想只有那些没有被“迈克”购买

+0

了解准备好的发言,以防止SQL注入 – Jens

+0

在您的查询的WHERE子句,你有'e.username!=“$ username''但'e'是产品表,但表中的产品没有按别名没有“用户名”列。正确命名你的别名 – Ramanlfc

回答

0

我不知道如果我正确理解你的问题,但我认为要做到这一点:

$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; 
} 
+0

这实际上是安静缓慢,因为你会选择所有其他用户,这是一个更大的结果,所以查询计划必须做更多的比较 – DarkMukke

-1

你应该选择去* FROM product WHERE id NOT IN(SELECT p_id FROM order WHERE user_name = '迈克')就是所有

+0

为什么,它有什么帮助,很好的格式。就这样。 [help] in [help] – Pred

+0

与我的回答非常接近,因为它是一种反连接,但“NOT EXISTS”无类型,因为db不需要比较2个值。 – DarkMukke

0

我想这是你的目标是什么。

$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); 
+0

这与原来的问题有什么不同(记住'<>'可以用'!='来转换) – DarkMukke