2017-08-03 70 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