2016-10-17 3 views
0

나는 Pokemon을 기반으로 데이터베이스를 만들고 있지만 현재 다른 동작으로 Pokemon을 삽입하는 데 어려움을 겪고 있습니다.SQL - 같은 열의 여러 값을 가진 레코드를 삽입하는 방법?

각 포켓몬에는 이동 세트가 있으므로 하나의 이동뿐만 아니라 많은 설정이 있습니다. 그러나 테이블에 이동 길이가 가변적 인 Pokemon을 삽입하려고하면 MySQL은 이전의 것을 무시하고 마지막 이동 만 삽입합니다.

간단히 말해서 : 동일한 포켓몬의 여러 레코드를 삽입하는 방법은 무엇입니까?

[실제 이메일과 비슷한 좋은 예가 여러 이메일 주소를 가진 사람이 될 것입니다. 테이블에 삽입하는 방법은 무엇입니까?]

+1

포켓몬 행 ID의 외래 키와 연결된 별도의 테이블 2 개 – RiggsFolly

답변

0

문제는 한에로 이행하고 있다는입니다 - 하나의 관계지만, 당신이 가진 것은 다 - 대 - 다 관계입니다 (각 포켓몬은 많은 움직임을 가지고 있으며, 각각의 움직임은 많은 포켓몬에 의해 배울 수 있습니다).

아마도 테이블 2 개가 필요합니다.

Table 1: Pokemon 
ID, Name, Move1ID, Move2ID, Move3ID, Move4ID, Types etc. 

Table 2: Moves 
ID, Name, PP, Power, type etc. 

그런 다음 두 테이블 간의 모든 조인 정보가 포함 된 다른 테이블을 사용할 수 있습니다. 동일한 포켓몬 ID와 동일한 이동 ID를 포함하는 여러 행을 포함하는 여러 행을 가질 수 있지만 [포켓몬 ID, 이동 ID] 조합은 고유합니다.

Table 3: PokemonMoves 
PkID, MoveID 

은 그럼 그냥 다 대다 관계,이 외모에 대해 SO에 게시물을 많이가 있습니다

SELECT * 
FROM Pokemon AS p 
LEFT JOIN PokemonMoves AS pm on p.ID = pm.PkID 
LEFT JOIN Moves AS m ON m.ID = pm.MoveID 

이 관계 테이블을 통해 움직임 테이블에 포켓몬 테이블에서 가입을 할 수 Many to many relationship?

+0

글쎄, 알다시피, 나는 이드와 이드를 연결시키는 방법이 없다. –

+0

^^ 누르기가 너무 빨리 시작됩니다 ...하지만 네, 저는 pokeapi.co에서 정보를 얻습니다. 그리고 그들은 포켓몬이 움직이는 분야가 없습니다. 그러나 포켓몬은 할 수있는 일에 대한 ID를 가지고 있습니다. 그래서, 나는 하나의 많은 것 (하나의 포케몬은 많은 움직임을 가지고 있음)을 공급자에 의한 데이터 설정에 기초한다고 가정합니다 ... 확실하지는 않지만, 이것에 익숙하지 않습니다. 링크에 감사드립니다. 용어로 더 잘해야합니다. –

+0

네, 할 수 있습니다 - 각 포켓몬 레코드는 ID를 가지고 있으며 이동 컬렉션의 각 이동에 ID가 있습니다 - 이동 URL에서 해당 URL을 추출하거나 이동 페이지에서 데이터를 가져와야 할 수도 있습니다. pokeapi.co와 같은 데이터 소스가 이미있는 경우 왜 자신 만의 데이터 소스를 구현하려고합니까? 무엇을 원하는가? –

0

글쎄, 테이블은 어떻게 생겼습니까?

단일 "전자 메일"필드에 제약이있는 경우 여러 전자 메일 주소를 단일 레코드 (= 사람)와 연결할 수있는 유일한 방법은 전자 메일을 처리하는 것입니다 필드는 쉼표 (또는 무엇이든) 구분 된 목록으로 표시됩니다. 당신은 그러나 구조를 제어하는 ​​경우

, 당신이 "사람"의 및 "이메일"의 사이에 일대 다 관계로 전환 할 수 있습니다 - 같은 :

tblPerson 
[id] 

tblEmailAddresses 
[person_id] 
[email] 

을이 같은 것을 쿼리 것 :

SELECT id, email 
FROM tblPerson INNER JOIN tblEmailAddresses ON 
id = person_id 
WHERE id = <person you're interested in> 

그 사람이 전자 메일 주소를 가진만큼 많은 레코드를 반환합니다. 하드

는 말을 정확히 삽입 코드/데이터를 보지 않고 볼 것,하지만 당신은 같은 것을 할 수있는 방법 :

sID = <whatever> 
For each sEmail in EmailCollection 
    INSERT INTO tblEmailAddresses 
    (person_id, email) 
    VALUES (sID, sEmail) 
Next 
+0

당신은 실제로 내가 묻고있는 것에 집중하고 있습니다. 코드 부족으로 유감스럽게 생각합니다. Zac Faragher의 대답을 보면, 정확히 내가 묻고있는 DB 설정과 관련이 있습니다. 하지만 나는 foreignkey로서 Pokemon (re : Person) 테이블에서 movesID (예제와 관련하여 : emailsID)를 가지고있다. 그러나 당신의 논리는 더 좋아 보인다. 나는 그것을 시도 할 것이다. 고맙습니다. –

+0

또한 테이블의 구조를 제어합니다. 이것은 내 개인 프로젝트입니다. –

관련 문제