현재 내 웹 사이트에서 기사에 태그가 있습니다.mysql 무엇이 더 빠를 것입니까?
내가 지금처럼 그들을 위해 카테고리 태그 목록을 수집하기 위해 MySQL의 쿼리를 수행 각각에 대한 기사 목록을 통해 내가 루프 : 이제
SELECT c.`category_name`, c.`category_id`
FROM `articles_categorys` c
INNER JOIN `article_category_reference` r ON c.category_id = r.category_id
WHERE r.article_id = 8136
ORDER BY r.`category_id` = *IDHERE* DESC, r.`category_id` ASC
LIMIT 4
, 내가 가진 페이지를 상상 30 말 기사가 한 번에 표시되면 위 쿼리가 30 번 수행됩니다. 나는 그것이 끔찍하다고 상상한다. 내가하기로 결정 무엇
이 페이지의 모든 article_ids의 배열을이었고, 다음이 대신 수행
이SELECT c.`category_name`, c.`category_id`, r.article_id
FROM `articles_categorys` c
INNER JOIN `article_category_reference` r ON c.category_id = r.category_id
WHERE r.article_id = 8136 OR r.article_id = 8130 OR r.article_id = 8127
OR r.article_id = 8125 OR r.article_id = 8123 OR r.article_id = 8120
OR r.article_id = 8119 OR r.article_id = 8117 OR r.article_id = 8116
OR r.article_id = 8112 OR r.article_id = 8107 OR r.article_id = 8106
OR r.article_id = 8037 OR r.article_id = 8104 OR r.article_id = 8103
내가 그 위에서 발견 된 배열을 통해 단지 루프에 PHP를 사용하여 일치 article_id를 현재 기사로 보내고 일치하면 category_name을 echo합니다. 유일한 문제는 article_id 당 4 개로 제한 할 수 없다는 것입니다.
새로운 접근 방식이 더 좋든 나쁘거나 두 가지 모두가 끔찍한가요?
예 데이터 사용하기 :
단지 좋은 질의를 할 때로 충분하지CREATE TABLE `articles_categorys` (
`category_id` int(11) NOT NULL,
`category_name` varchar(32) COLLATE utf8_bin NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `article_category_reference` (
`ref_id` int(11) NOT NULL,
`article_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `articles_categorys` (`category_id`, `category_name`) VALUES
(22, 'Site Info'),
(1, 'Editorial'),
(2, 'Review'),
(3, 'Interview'),
(4, 'Game Sale'),
(5, 'Steam'),
(6, 'Indie Game'),
(7, 'Crowdfunding'),
(8, 'Game Bundle'),
(9, 'Free Game'),
(10, 'MMO');
INSERT INTO `article_category_reference` (`ref_id`, `article_id`, `category_id`) VALUES
(15, 6231, 22),
(14, 6231, 1),
(16, 6231, 2),
(17, 6231, 3),
(18, 6231, 4),
(19, 6231, 9),
(20, 6231, 10);
시도해보세요. IN (8136, 8130, 8127, .......)' – RiggsFolly
IN()에 대해 마음을 먹었습니까? –
일반적으로 SQL 쿼리는 모든 웹 페이지의 병목 지점이므로 대개는 똑똑한 쿼리를 사용하는 것이 가장 좋은 솔루션입니다. 결과에 태그를 그룹화하려면'ORDER BY r.article_id'를 잊지 마세요. 그러면 코드가 저장됩니다. –