2009-10-13 7 views
1

현재 이미지 필드에 이미지, 제목, 설명 및 다른 필드는 imageID에 대해 autoincrements, 다른 파일에는 , 실제 파일에는 vfile, 그리고 *** 같은 다른 필드가 있습니다. 3 개의 체크 박스와 텍스트 필드. 모든 것이 잘 작동하고 이것이하는 일입니다. 웹 사이트의 페이지로 정보를 가져올 수 있도록 데이터를 데이터베이스에 제출합니다. 업데이트하려는 부분은 3 개의 확인란과 텍스트 필드입니다. 첫번째 체크 박스는 다음과 같습니다 : Apples 두번째 : 오렌지 세 번째 : 포도 그리고 다른 카테고리에는 빈 텍스트 필드가 있습니다. 뭔가를 추가하면 "기타"카테고리에 추가됩니다.PHP 동적 체크 박스

그래서 데이터베이스 디자인에는 1 - 사과, 2 - 오렌지, 3 - 포도, 4 - 다른 4 개의 필드가 있습니다.

확인란을 클릭하면 올바른 사과, 오렌지 또는 포도 아래의 데이터베이스에 체크 박스가 추가됩니다. 필드를 Bannanas와 같이 텍스트 상자에 추가하면 "Bannanas"가 데이터베이스 필드 vother에 추가되어 데이터베이스에 표시됩니다.

괜찮 았지만 다음 사진에 4 개 항목과 다른 항목이있는 경우 어떻게 될까요? 다음 그림에 사과, 오렌지, 포도, Bannanas, 자두가있는 경우?

"Bannanas"다른 카테고리를 어떻게 가질 수 있습니까? 다음에 이미지 추가 페이지로 이동할 때 다음 사진을 위해 선택할 수있는 확인란 카테고리로 변경하십시오. 두 번째 사진을 제출할 때 3 개의 체크 박스가 아닌 4 개의 체크 박스를 사용하여 처음 4 개의 "사과, 오렌지, 포도, Bannanas"를 확인한 다음 제출할 수 있습니다. 다른 카테고리의 매실.

기본적으로 제출할 때 다른 필드에있는 것을 취하여 데이터베이스에 새 카테고리를 추가합니다.이 카테고리는 확인란 선택 항목의 배열에 표시되며 확인란은 이제 다른 카테고리에서 제거됩니다. 이 이상 같은 범주를 만들 가능성이 이전 데이터를 재 작성 했을까 위해 (따라서는, 기존의 필드에 왼쪽 값을 싶지 않을 것이다.

을 어쨌든, 어떤 제안? 사전에 감사.

+0

당신이해야 할 일을 알고있는 것 같습니다. 어떤 문제가 있습니까? –

답변

1

을 (그것은 이 같은 소리는 PHP 디자인에 대한 질문이 아닌 데이터베이스 질문 일 뿐이지 만 조언을 구하는 것이 오해 될 수 있습니다.

이 속성 (사과, 오렌지 등)이 들리는 것 같습니다.)는 주 테이블에 열로 저장되지만 설명하는 상황은 태그 추가와 유사하게 들립니다. 일반적으로 태그가 달린 항목 목록 (이미지)과 모든 가능한 태그 (행을 포함하는 테이블 : Apple, Orange, Grape)의 개별 목록. UI에는 기존 태그 (태그 테이블의 행)를 선택하거나 '기타'상자를 사용하여 새 태그를 추가하는 옵션이 있습니다. 새 태그가 새 행으로 태그 테이블에 추가됩니다. 태그와 태그가 달린 항목에는 다 대다 관계가 있으므로 태그가 지정된 항목의 키와 태그 키를 저장하는 세 번째 테이블 (조인 테이블이라고 함)을 만듭니다. 그렇게하면 관계의 어느 한 쪽을 쉽게 선택할 수 있습니다. 주어진 항목에 대한 모든 태그를 가져옵니다. 주어진 태그가있는 모든 항목을 가져옵니다.

도움이 되었습니까?

(편집 : 의견은)

그래서, 활동 태그 목록처럼 들린다.모든 활동에 대한 확인란이있는 양식을 표시하려면 활동 표를 쿼리 할 수 ​​있습니다. 각 체크 박스에는 name 속성이나 바운드 된 행의 ID를 캡처 할 수 있습니다.

또한 현재 열어 본 이미지에서 선택한 태그의 ID를 조인 테이블에서 선택합니다. 확인란 목록을 채우는 동안 페이지에 넣고있는 확인란의 ID가 이미지의 태그 목록에 있는지 확인하기 위해이 결과 집합을 확인할 수 있습니다.

제출시 db에 다시 저장하려면 가장 쉬운 방법은 (트랜잭션에서) 조인 테이블에서 이미지의 모든 항목을 삭제하고 확인란의 상태에 따라 새 항목으로 바꾸는 것입니다 의 형태의.

+0

우선, 도움 주셔서 감사합니다. -이 질문을하는 것은 처음입니다. 나는 보통 전문가 교환에 질문을하지만, 뭐든간에. 어쨌든,이 문제는 내 친구에게 해당되는 문제입니다. 원래 테이블을 디자인 한 방식이 표준화되지 않았으며 기타 : 상자에있을 수도있는 것을 추가하는 것은 알고 있습니다. 상자는 디자인 방식대로 수행되지 않으므로 생성했습니다. 새로운 테이블, tbActivities. 그래서 Other : box에 무언가를 추가하고 폼을 제출하면 그 텍스트 박스에 가지고 있던 것을 tbActivities 테이블에 추가합니다 - 작동합니다. 또 다른 코멘트 오는 -> – JParsons4

+0

내가 어떻게 궁금하네요 각각의 확인란을 참조 할 수 있습니다, UPDATE sql 나중에, 그래서 하나의 확인란을 선택했지만 나중에 체크하지 않으려는 경우, 어떻게 넣어 수 있도록 SQL에, 예를 들어 Strawberries에 대해 처음으로 검사 된 내용을 확인합니다. tbActivities가 while 루프를 통해 빠져 나오기 때문에 지금 선택하지 않으려는 경우 각 확인란에 실제 이름이 없습니다. 그렇긴하지만 그것을 참조하는 방법을 모르겠다. 왜냐하면 현재 행을 tbActivities로 가져와 INPUT의 "chk-"에 추가하기 때문이다. – JParsons4

+0

동적이기 때문에 어떻게 업데이트 코드를 변경해야 할지를 어떻게 알 수 있습니까? 그것은 모든 체크 박스가 tbActivities에서도 가져온다. 도움 주셔서 감사합니다.이 문제는 나를 벽으로 몰아 가고 있습니다. – JParsons4

0

사과, 오렌지 및 포도주를 버리십시오.

imageID와 itemtype의 두 필드가있는 두 번째 테이블을 만듭니다. 두 키 중 하나를 키로 설정하지 마십시오. 이제 각 이미지에 필요한 여러 유형의 항목을 원하는만큼 나열 할 수 있습니다. 데이터베이스에서 사용중인 항목 유형 목록을 얻는 것은 비교적 비쌉니다.하지만 수백만 개의 항목이 없으면 문제가되지 않습니다. (Mikeb는 이것을 사용하기 위해 별도의 테이블에 항목 유형 목록을 유지할 것을 제안합니다.)

다른 방법으로는 발생하는 각 항목 유형에 대해 첫 번째 표에 동적으로 열을 추가하는 것입니다. 이렇게하면 매우 희소한 표가 생성됩니다. 나는 이것을하지 않을 것이다.

0

무한한 수의 속성을 지원하도록 데이터베이스 스키마를 변경해야합니다.

레코드의 필드 집합에서 특성 목록을 새 테이블의 관련 레코드 목록으로 이동해야합니다. 이 새 테이블에는 2 개의 열이 필요합니다. 첫 번째 테이블은 기존 테이블의 기본 키이므로 테이블 간의 관계를 설정할 수 있습니다. 두 번째는 속성 필드 ('Bananas'또는 'Apples'또는 'Plums'등)입니다. 주 테이블의 각 레코드에 대해 원하는만큼 속성 테이블에 많은 레코드를 가질 수 있습니다. 어떤 것도 확인되지 않으면 속성 레코드를 가질 수 없습니다.

두 테이블 간의 이러한 종류의 관계를 일대 다 관계라고합니다.