내 테이블과 같이 테이블에 존재 데이터 :mysql을 삽입하지 않을 경우 가입
text: 'lorem ipsum'
tag1: 'music'
tag2: 'pop'
tag3: 'singer'
그래서 저는 AQ가 필요합니다. tag1/tag2/tag3이 이미 "tags"에 있는지 검사하고, 그렇지 않으면 삽입 한 다음 외래 키 + "text"를 "posts"의 새 행에 삽입합니다.
나는 mysql을 살펴 본다. 존재하지 않는다면 나는 갇혀 있지만 어디서부터 시작해야할지 모른다. 여러 쿼리를 처리 할 수 있지만 동일한 결과를 얻는 또 다른 방법이 있어야합니다.
누구에게도 경험이 있습니까?
내 친구는이 같은 제안
업데이트 : getTagId의 구현은 아직 행방 불명입니다 물론
CREATE FUNCTION getTagID(tag VARCHAR('100')) RETURNS int
INSERT INTO posts (text,tag1,tag2,tag3)
VALUES ('lorem ipsum', getTagID('music'), getTagID('pop'), getTagID('singer'));
,하지만 그 메이크업의 의미는 무엇입니까? getTagID는 주어진 태그가있는 id를 선택해야하며, 존재하지 않으면 삽입하고 리턴한다. 어떤 도움을 주셔서 감사합니다.
솔루션
나는 MySQL의에서 사용자 정의 함수를 만들어 :
DELIMITER ;;
CREATE FUNCTION getTagID(tag VARCHAR(100)) RETURNS BIGINT
BEGIN
DECLARE tagID BIGINT;
SET tagID = (SELECT id FROM tags WHERE text = tag);
IF tagID IS NULL
THEN
INSERT INTO tags (text) VALUES (tag);
SET tagID = (SELECT LAST_INSERT_ID());
END IF;
RETURN tagID;
END;;
DELIMITER ;
을 지금은 그냥 같은 게시물에 삽입 할 수 삽입하는 기능을 가진
INSERT INTO posts (text,tag1,tag2,tag3)
VALUES ('lorem ipsum', getTagID('music'), getTagID('pop'), getTagID('singer'));
태그가 아직없는 경우에만 "태그"에 추가하고 기존 또는 새로 생성 된 태그의 ID를 제공합니다. Yipeee :)
감사합니다. INSERT IGNORE를 사용하면 삽입 후 PK를 얻을 수 있습니까? 1 거래 내에서 다음 진술에이를 사용할 수 있습니까? –
응용 프로그램 서버 쪽에서 PDO/PHP를 사용합니다 –
위의 또 다른 아이디어를 추가했습니다 ... 아무도 신경 쓰지 않는 것 같습니다;) –