2013-02-27 2 views
0

현재 사용자의 사용자 ID와 현재 사용자의 다른 사용자 ID가있는 친구 테이블을 만들고 싶습니다. 이 같은의데이터의 한 셀에서 구분 된 값 만들기 SQL

종류 :

내가 업데이트 할 수 있도록하려는
userid friends 
456  345; 745; 769; 

이 데이터는 현재 사용자가 친구를 얻는마다 [이전 후 새 값을 삽입].

구분 기호 및 데이터의 폭발/폭발에 대한 주제를 보았지만이를 시작하는 방법을 정확히 파악하지 못했습니다.

의견이 있으십니까?

+0

우정을 관계로 그룹화하는 다른 테이블을 추가하는 것으로 시작합니다. – Voitcus

+0

이 방법으로 데이터를 저장하는 것이 가장 정확한 해결책은 아닙니다. 외래 키가있는'Friends' 테이블을 고려 했습니까? 그렇게하면 데이터가있는 모든 사용자와 모든 친구가있는 친구 테이블을 가리키는 필드를 하나의 테이블에 갖게됩니다. – Yaroslav

+2

그건 정말 * 나쁜 아이디어입니다. –

답변

1

접근 방식을 재검토하고 각 사용자 ID/친구 쌍에 대해 하나의 레코드가있는 간단한 테이블을 사용하십시오.

userid friends 
456  345 
456  745 
456  769 

이렇게하면 데이터를 유지 관리하기가 쉽습니다.

+0

하지만 다른 방법으로 값을 추가해야하므로 테이블을 매우 쉽게 채울 수 있습니다. 어쨌든, 난 그냥 아이디어를 파고있어. 솔루션을 구현하는 것이 가장 좋을까요? 또는 행 수를 줄이기 위해 더 좋은 아이디어가 있습니까? – asleighna

+0

행 번호를 신경 쓰지 않아도됩니다. 그들이 수백만에 올 때 그것을하십시오! MySQL은 이러한 테이블을 처리하는 데 정말 빠릅니다. – Ghigo

0

기존 구조를 유지해야하는 경우. 친구를 추가하려면 :

  1. 확인 친구가 $rs['friends'] 내가 대신 관계의 테이블을 사용하는 것이 좋습니다, 345; 745; 769; 새로운 친구 ID는 그러나 999

    // remove trailing `;` 
    $friend_list = substr($rs['friends'], 0, strlen($rs['friends'])-1); 
    $friends = explode('; ', $friend_list); 
    if(in_array(999, $friends)) { 
        // friend exists 
    } else { 
        $friend_list .= '; 999;'; 
        // then save back to DB 
    } 
    

    입니다 포함한다고 가정 해 봅시다 현재 친구 목록

에 있는지 여부

0

음, 아직 배우고 있습니다. 그리고 당신 의견은 모두 도움이됩니다. 모두 감사합니다! 나는 각각을 생각하고 더 많은 아이디어를 얻기 위해 물고기를 잡을 것입니다.

관련 문제