mysql - 选择具有相同类别的所有项目

标签 mysql select

我有一个表CategoryLinks,其中有两列(article_id,category_id),均为整数索引。 这就是我的独特索引。

我想要所有具有categorie_ids 1,2,34,5的article_ids

我用 in(1,2,3,4,5) 尝试过,然后使用 php,但速度很慢,我认为应该可以使用 MySql。

顺便说一句。 CategoryLinks 拥有超过 500,000 行

感谢您的任何提示!

显示创建表类别链接

CREATE TABLE `CategoryLinks` (
  `article_id` int(10) NOT NULL,
  `category_id` int(7) NOT NULL,
  UNIQUE KEY `Unique` (`article_id`,`category_id`),
  KEY `category_id` (`category_id`),
  KEY `article_id` (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

最佳答案

...或者如果您喜欢更少的代码...

CREATE TABLE `CategoryLinks` (
  `article_id` int NOT NULL,
  `category_id` int NOT NULL,
  PRIMARY KEY (`article_id`,`category_id`)
);

SELECT COUNT(*) FROM categorylinks;
+----------+
| COUNT(*) |
+----------+
|   107943 |
+----------+

SELECT x.article_id
   FROM categorylinks x
  GROUP
     BY article_id
 HAVING SUM(category_id IN (1,2,3)) = 3
     OR SUM(category_id IN (4,5)) =2;
+------------+
| article_id |
+------------+
|          1 |
...
|      19860 |
+------------+
9573 rows in set (0.06 sec)

并解释...

           id: 1
  select_type: SIMPLE
        table: x
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 28719
        Extra: Using index

关于mysql - 选择具有相同类别的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23595592/

相关文章:

mysql - 对两个表使用子查询

java - 创建数据库和表,并在springboot中使用java将静态数据插入到表中

mysql - 我的 MySql 查询出了什么问题

mysql - 优化查询?

php - 如何在mysql查询中组合多个下拉列表值?

php - MySQL 如何从 URL 传递的参数中获取列

xslt - 按值对元素进行排序并删除重复项

mysql - 没有 WHERE 语句的 INT 比较

mysql - 从一个表的一列中选择属于不同列和表的值

MySQL 5.5 SELECT DISTINCT - 如何返回多个没有查询重复的列?