한 번에 하나의 테이블에만 삽입 할 수 있습니다.
하나의 솔루션은 트리거를 사용하고 다른 하나는 트랜잭션을 사용하는 것입니다.
첫 번째 엔진은 어떤 엔진과도 사용할 수 있으며, 후자는 InnoDB 또는 유사 엔진이 필요합니다.
START TRANSACTION;
INSERT IGNORE INTO tag (name) VALUES ('$example1', '$example2');
INSERT INTO article (title, body) VALUES ('$title','$body');
SET @article_id = LAST_INSERT_ID();
INSERT INTO tag_link (tag_id, article_id)
SELECT t.id, @article_id FROM tag t WHERE t.name IN ('$example1','$example2');
COMMIT;
는 다음 필드 타입 blackhole
의 테이블을 생성.
title: varchar(255)
body: text
tag1: varchar(50) DEFAULT NULL
tag2: varchar(50) DEFAULT NULL
...
add as many tags as you want.
당신을 위해 실제 저장 작업을 수행 할 블랙홀 테이블에 AFTER INSERT
트리거를 추가합니다. DELIMITER $$
CREATE TRIGGER ai_bh_newacticle_each AFTER INSERT ON bh_newacticle FOR EACH ROW
BEGIN
INSERT IGNORE INTO tag (name) VALUES (new.tag1, new.tag2,...,new.tag25);
INSERT INTO article (title, body) VALUES (new.title,new.body);
SET @article_id = LAST_INSERT_ID();
INSERT INTO tag_link (tag_id, article_id)
SELECT t.id, @article_id FROM tag t
WHERE t.name IN (new.tag1, new.tag2,...,new.tag25);
END$$
DELIMITER ;
DELIMITER $$
지금 당신은 단지 하나의 문에 태그 문서를 삽입 할 수 있습니다
돌아 가기 INSERT INTO bh_newarticle (title, body, tag1, tag2, tag3)
VALUES ('$title','$body','$tag1','$tag2','$tag3');
질문에
태그는 제한된 수의 경우에만 유용합니다. tag.name
에 (고유 한) 색인을 넣으면 태그를 찾는 것이 매우 빠를 것입니다. 10.000 태그도 있습니다. 정확히 일치하는 것을 찾고 있기 때문입니다. 그리고 정말로 서두르다면 언제든지 태그 테이블을 name
필드의 hash index
테이블로 만들 수 있습니다.
태그 조회가 느려지는 것에 대해 걱정할 필요가 없습니다.
기사 당 태그가 너무 많아서는 안됩니다. 5 좋은 시작 같습니다. 10이 너무 많습니다.
물론 항상 거기에는'해결 방법 '이 있습니다. – Johan