製品を保存するためのテーブルと注文リストを保存するためのテーブルの 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が遅くなります