我有一个表CategoryLinks
,其中有两列(article_id,category_id
),均为整数索引。
这就是我的独特索引。
我想要所有具有categorie_ids 1,2,3
或4,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/