2012-04-11 4 views
0

데이터베이스의 테이블을 1 개 액세스하는 2 개의 프로그램 인스턴스가 있습니다.
points 재생기는 첫 번째 인스턴스를 사용하여 테이블에 자신의 포인트 (예를 들어, 포커)를 저장하고자하는 경우한 번만 삽입하십시오

game | player1 | player2 
--------|-----------|----------- 
Poker | 5  | 
Skat | 8  | 4 
Bridge |   | 10 

, 그것은 포커 이미이 있는지 여부를 확실히 만들 수있다. 그렇지 않은 경우, player1의 포인트와 함께 포커가 삽입됩니다. 그러나 player2에 의해 Poker가 이미 삽입 되었다면 player1의 포인트 만 삽입해야합니다 (행은 변경해야합니다).

어떻게 게임의 모든 종류의 단 한번 만 포인트가 삽입 (변경)되어,이 경우 삽입되어 있는지 확인 할 수 있습니까?
제 생각에는 열 game은 고유해야합니다.

내 솔루션은 처음에 게임의 종류를 쿼리하고 행의 수를 확인하는 것입니다. 0 행이 있다면, 게임과 포인트를 삽입하십시오. 이미 1 행이 있다면, 점만 삽입하십시오.
하지만 더 나은/더 빠른 해결책이 있습니다. 처음에는 질문을하지 않아도됩니까?

+2

어쩌면 당신은 당신의 데이터베이스 디자인을 재고해야한다. 더 많은 사용자를 추가하는 경우'users','games' 및 상호 참조 테이블'user_game'에 대한 테이블을 갖는 것이 좋습니다. – dgw

+0

알아, 이건 단지 예일 뿐이야. 어쨌든 고마워! – user1170330

+0

18 항상 ...... –

답변

4
INSERT INTO points (game,player1) VALUES ('Poker',5) 
    ON DUPLICATE KEY UPDATE player1=5; 

자세한 내용은 MySQL 설명서 (INSERT ... ON DUPLICATE KEY Syntax)를 참조하십시오.

+0

+1하지만 테이블은'게임'이 아닌'포인트'라고합니다. – FGreg

+0

항목의 ** 조합 **이 가능합니까? 그래서 '포커'는 여러 번 허용되지만 모든 플레이어에게 한 번만 허용됩니까? 'game-player1' 조합 만이 유일해야합니다. – user1170330

0
는 두 문장으로 삽입 브레이크

. 이 기능을 사용하려면 '게임'이 고유 한 열이어야합니다. 즉, 두 값이 같지 않아도됩니다.

INSERT INTO 'game' VALUES('Poker',null,null); 
UPDATE 'game' SET player1='5' WHERE 'game'='POKER'; 

고유 제한 조건으로 인해 첫 행이 이미 있으면 영향을주지 않습니다.

0

사용 구문으로 대체합니다. 데이터베이스 테이블에 대한 고유 제한 조건을 작성할 수 있습니다.

here로 교체 읽어보십시오. 고유 제한 조건 here에 대해 읽어보십시오.

0
REPLACE INTO points (game,player1) VALUES ('Poker',5);