在編碼的所有方面,SQL是我最弱的技巧,所以請原諒我,如果我聽起來像我不知道我在說什麼,因爲我可能不會!MySQL使用「in」條件檢索repeatin結果
現狀:
建立一個購物車,其中一個名爲「購物車」表中有一個名爲型的「產品」 VARCHAR 255場,而「產品」的價值將是一個逗號分隔的字符串。字符串的每個元素都將是一個代表「產品」表中產品ID的數字。
客戶的記錄可能在「產品」字段中包含類似1,1,1,2,3的值。這意味着客戶已經增加了三個項目1,項目2之一,和一個項目3
問題:
所以,這裏是SQL語句我有現,但問題是我需要的一個SQL語句會從產品表中返回重複的產品數據:
SELECT product_id, product_name,price
FROM products
WHERE id in ('1','1','1','2','3')
的,其結果將是一組三個項目從「產品」表,1,2和3。換句話說,它沒有給我三個'1'的產品數據,它只給了我一個獨特的價值。產品表中不是3個值,而是來自產品表的5個值,前三個結果相同,因爲它們是相同的product_id = 1。
我需要一個SQL語句,這將使我的多餘的產品信息,因爲畢竟,一個人可以用的product_id = 1
車李樹斌部件:
id INT(15)
uid VARCHAR(32)
email VARCHAR(100)
products VARCHAR(255)
date DATETIME
checkout TINYINT(1)
產品:
id INT(15)
product_id varchar(32)
product_name varchar(128)
product_associations varchar(255)
short_description varchar(255)
long_description mediumtext
price varchar(32)
image varchar(128)
我的PHP代碼:
$productslist = str_replace(",","','",$row->products);
$productslist = "'" . $productslist . "'"; echo $productslist;
$sql2 = "SELECT product_id, product_name,price FROM products WHERE id in ($productslist)";
$query2 = $this->db->query($sql2);
$i = 0;
if ($query2->num_rows() > 0){
foreach ($query2->result() as $row2){
$products[$i]['product_id'] = $row2->product_id;
$products[$i]['product_name'] = $row2->product_name;
$products[$i]['price'] = $row2->price;
$i++;
}
}
...這查詢的結果將是:
Product ID: #0001
Product Name: "Ducky"
Price: $1.50
Product ID: #0002
Product Name: "Horse"
Price: $1499.00
Product ID: #0003
Product Name: "T-shirt"
Price: $5.00
更新: 在最佳做法的利益,我學的是「標準化」表的理論,然後回滾上述以逗號分隔的產品領域的方案。我創建了一個名爲「cart_list」一個單獨的表,與字段:
id
cart_id
product_id
...我只需插入新記錄爲每個新「加入購物車」,由cart_id場鎖上對車表,通過product_id字段鍵入產品數據。
我認爲你需要正常化你的領域,看起來像'1,1,1,2,3'。 –
如果您不能預先篩選您的ID列表,可以使用SELECT DISTINCT ID或GROUP BY。 – mario
丹尼爾是正確的 - 您需要使用連接購物車和產品的表格,而不是用逗號分隔的列表。 –