Fiddle Example檢查組合(集團通過時間戳)在MySQL
存在我有一個頁面,讓人們比較從數據庫項目。每個比較的項目數量不固定。我使用兩列表來存儲它們的比較記錄和時間戳,以將它們組合在一起。
假設我有product_id 304
和308
和306
,我該如何檢查它們是否存在於數據庫中作爲同一組?我不知道如何檢查多個product_ids的組合,我正在尋找這樣的事情:
輸出:
product_id name
306|308|304 D|E|C
這裏的查詢:
SELECT product_id,name
FROM (
SELECT
GROUP_CONCAT(c.product_id SEPARATOR "|") AS product_id,
GROUP_CONCAT(p.name SEPARATOR "|") AS name
FROM compare c
INNER JOIN product p ON p.product_id = c.product_id
GROUP BY c.timestamp
ORDER BY c.timestamp
/* How to do a where clause here? WHERE p.product_id = 306 AND p.product_id = 308 AND p.product_id = 304 */
)e
GROUP BY product_id
CREATE TABLE compare
(`product_id` int,`timestamp` timestamp)
;
INSERT INTO compare
(`product_id`,`timestamp`)
VALUES
(300,'2015-01-12 19:04:13'),
(302,'2015-01-12 19:04:13'),
(304,'2015-01-12 19:06:24'),
(306,'2015-01-12 19:06:24'),
(308,'2015-01-12 19:06:24'),
(310,'2015-01-12 19:08:40'),
(312,'2015-01-12 19:08:40'),
(314,'2015-01-12 19:08:40'),
(316,'2015-01-12 19:08:40'),
(302,'2015-01-12 19:10:50'),
(316,'2015-01-12 19:10:50')
;
CREATE TABLE product
(`product_id` int,`name` varchar(30))
;
INSERT INTO product
(`product_id`,`name`)
VALUES
(300,'A'),
(302,'B'),
(304,'C'),
(306,'D'),
(308,'E'),
(310,'F'),
(312,'G'),
(314,'H'),
(316,'I')
;
WHERE n IN(x,y,z)GROUP BY a HAVING COUNT(*)= 3 – Strawberry
您不應該使用時間戳作爲唯一ID,因爲無法保證它們的唯一性。 –