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 HAVING COUNT (*) = 3 – Strawberry
Вы не должны использовать временные метки как уникальные идентификаторы, потому что невозможно гарантировать их уникальность. –