製品を保存するためのテーブルと注文リストを保存するためのテーブルの 2 つがあります。
CREATE TABLE ProductsList(ProductId INT NOT NULL PRIMARY KEY, 商品名 VARCHAR(50)) INSERT INTO ProductsList(ProductId, ProductName) VALUES(1,'商品A'), (2,'商品B'), (3,'商品C'), (4、「製品 D」)、 (5、「製品 E」)、 (6,'商品F'), (7,'商品G'), (8,'製品H'), (9,'製品 I'), (10,'製品 J'); CREATE TABLE OrderList(OrderId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, EmailId VARCHAR(50), CSVProductIds VARCHAR(50)) INSERT INTO OrderList(EmailId, CSVProductIds) VALUES('PersonA@domain.com', '2,4,1,5,7'), ('PersonB@domain.com', '5,7,4'), ('PersonC@domain.com', '2'), ('PersonD@domain.com', '8,9'), ('PersonE@domain.com', '4,5,9'), ('PersonF@domain.com', '1,2,3'), ('PersonG@domain.com', '9,10'), ('PersonH@domain.com', '1,5');
出力
ItemName NoOfOrders
Product A 3
Product B 3
Product C 1
Product D 3
Product E 4
Product F 0
Product G 2
Product H 1
Product I 3
Product J 1
注文リストは、注文するすべての顧客のItemsIdをカンマ区切りの値として保存します.このように、dBテーブルに40,000を超えるレコードがあります
ここで、以下に示すように、アイテムと注文したアイテムの人数を表示するレポートを作成するタスクが割り当てられています
PHPで次のようにクエリを使用して、注文を1つずつ取得し、配列に保存しました。
SELECT COUNT(PL.EmailId)
FROM OrderList PL
WHERE CSVProductIds LIKE '2' OR
CSVProductIds LIKE '%,2,%' OR
CSVProductIds LIKE '%,2' OR
CSVProductIds LIKE '2,%';
1.単一のクエリを使用して同じ出力を取得することは可能ですか?
2.mysqlクエリでlikeを使用すると、テーブルのレコード数が40k行を超えるとdBが遅くなります