2017-02-04 94 views
0

我有三個表用戶,產品和用戶產品。SQL連接返回的結果不是數據庫中反映的結果

用戶具有用戶配置文件信息,產品具有主鍵,並且userproduct具有用於UserId和ProductId的兩個標題,用於匹配哪個用戶擁有哪個產品。

userproduct是建立在以下方式:

---------------------------------- 
| UserId (int) | ProductId (int) | 
---------------------------------- 
| 1   | 1    | 
---------------------------------- 
| 1   | 2    | 
---------------------------------- 

我的PHP代碼如下:

$userId = 1; 

$stmt = $pdo->prepare('SELECT * FROM product join userproduct on product.ProductId = userproduct.UserId where UserId = ?'); 
$stmt->execute([$userId]); 
$products = $stmt->fetchAll(); 

foreach ($products as $productsOwned) 
{ 
    echo $productsOwned['ProductName']; 
} 

我會以爲這將回聲出產品1,產品2。但是,它回顯了Product1,Product1。

我已經查看過我的數據庫幾次,一切似乎都是按順序的,但是因爲我仍在學習SQL,所以我假設我在那裏犯了一個錯誤。任何指導將不勝感激。

回答

1

你的SQL是錯誤的,如果你想加入這個表,並得到所有用戶的產品,你可以這樣做:

SELECT userproduct.UserId as userId, product.name as productName 
FROM userproduct 
JOIN product ON userproduct.ProductId = product.ProductId 
WHERE userproduct.UserID = {$userId}; 
+0

我認爲你必須在'product.name'型我以爲你的意思是這'product.productName',所以我改變了我的代碼,但現在我得到以下錯誤:'注意:未定義的偏移量:0在第40行的C:\ xampp \ htdocs \ index.php中,第40行是:'echo $產品已自動['ProductName'];' –

+0

嘗試var_dump結果($ products)並讓我知道你在那裏得到了什麼 – AfikDeri

+0

我得到:'array(2){[0] => array(2){[「userId 「] => int(1)[」productName「] => string(9)」Product1「} [1] => array(2){[」userId「] => int(1)[」productName「] = > string(13)「Product2」}}' –