我有两个表,一个用于存储产品,另一个用于存储订单列表。
CREATE TABLE ProductsList(ProductId INT NOT NULL PRIMARY KEY, 产品名称 VARCHAR(50)) 插入产品列表(产品 ID,产品名称) 值(1,'产品 A'), (2,'产品 B'), (3,'产品 C'), (4,'产品 D'), (5,'产品 E'), (6,'产品 F'), (7,'产品 G'), (8,'产品 H'), (9,'产品一'), (10,'产品 J'); CREATE TABLE OrderList(OrderId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, EmailId VARCHAR(50), CSVProductIds VARCHAR(50)) 插入订单列表(EmailId,CSVProductIds) 值('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 表中有超过 40k 条记录
现在我被分配了创建报告的任务,我应该在其中显示项目和订购项目的人数,如下所示
我在我的 PHP 中使用如下查询来将订单一个接一个地存储在数组中。
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行