MySQL 键值模式,返回必须匹配多个键的结果

纯技能83

我正在尝试利用一个简单的键值 innoDB 表来构造一个将返回所有适用结果的查询

架构:

CREATE TABLE `user_metadata` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `key` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `value` text COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_metadata_key_index` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

数据:

INSERT INTO
  `user_metadata` (
    `id`,
    `user_id`,
    `key`,
    `value`,
    `created_at`,
    `updated_at`
  )
VALUES
  (1, 1, 'nickname', 'bobby'),
  (2, 1, 'pet', 'dog'),
  (3, 1, 'transport', 'car'),
  (4, 2, 'nickname', 'andy'),
  (5, 2, 'pet', 'dog'),
  (6, 2, 'transport', 'car') (, 3, 'nickname', 'jonny'),
  (7, 3, 'nickname', 'jonno'),
  (8, 3, 'pet', 'cat'),
  (9, 3, 'transport', 'bike')

我提供的数据是简化的,我们的真实数据每个 user_id 使用 20 个不同的唯一键

我想要实现的是通过 user_id 返回 pet= dog AND transport=car 的所有记录,因此两个键都必须具有基于每个用户的给定值。

在传统的数据库模式中,这将是微不足道的,这种模式设计有优势,所以如果可能的话,我宁愿不重构模式,但是我不确定如何解决这个问题,我应该查看内部选择/内部连接等吗?

任何帮助将非常感激。

数据维达
SELECT *
FROM user_metadata
INNER JOIN user_metadata AS subQ
USING(user_id)
WHERE user_metadata.key = 'pet'
AND user_metadata.value = 'dog'
AND subQ.key = 'transport'
AND subQ.value = 'car';`

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章