2010-07-16 1 views
1

나는 friends(friendship_id, fid1, fid2, ENUM('pending', 'accepted', 'ignored')과 같은 테이블을 가지고 있습니다. 사용자가 다른 사람의 친구 요청을 무시하면 "나는 무시당했습니다!"라는 메시지가 나타나지 않도록하고 싶지만 데이터를 기록하기를 원합니다. 이것에 접근하는 방법에 대한 제안?친구가 PHP/MySQL 앱에서 누군가를 무시할 때 어떻게 처리해야합니까?

+4

.. 필드를 무시하도록 설정했지만 사용자를 표시하지 않습니다. – Fosco

+0

friends (... ENUM (...) parse error –

답변

4

확실히해야 할 첫 번째 일은 You've been ignored! 메시지를 표시하는 코드를 구현하지 않는 것입니다. 이렇게하면 대부분의 문제가 해결됩니다.

하지만 조심해야합니다. 더 미묘한 문제가 있습니다. 사용자가 무시를 클릭하지 않은 것처럼 모든면에서 보낸 사람의 관점에서 시스템이 작동해야합니다. 즉, 보낸 사람이 두 번째 요청을 발행하고 일반적으로 시스템에 "이미이 사용자에게 요청을 보냈습니다"라고 표시되면받는 사람이 첫 번째 요청을 무시한 후에도이 메시지가 계속 표시되어야합니다. 비공개로 예정된 이벤트에 대한 응답으로 메시지를 변경하여 정보가 유출되지 않도록주의해야합니다. 의견에


응답 :

당신이 그것을 심지어 처음에 "당신은 이미이 사용자에 요청을 보낸"메시지를 보내지하는 것이 가장 좋습니다 생각하십니까?

나는 이것이이 질문의 범위를 벗어 났으며 그 자체로 긴 토론이므로 여기서는 다루지 않을 것이라고 생각합니다. 답은 애플리케이션 구현 방식에 따라 다릅니다. 짧은 대답은 : 응용 프로그램이 사용자를 도우며 직관적이어야하므로 메시지가 도움을 줄 수 있어야합니다.

응답이없는 경우 요청이 1 주 후에 자동으로 만료됩니다. 현재 요청이 만료되면 사용자가 새 요청을하도록 허용 할 수 있습니다. 요청 무시는 해당 요청 또는 해당 사용자의 모든 요청을 무시한다는 것을 고려해야합니다.

나는 누가 내 현재 스키마에서 누가 무시하는지 구분하는 방법을 고려하지 않았습니다.

우정 요청은 입니다. 당신은 보낸 사람과받는 사람이 있습니다. 반면 우정은 보통 (항상 그런 것은 아니지만) 간접적 인 관계로 간주됩니다. 우정 요청에는 일반적으로 "안녕하세요, 저를 기억해주십시오. 지난 밤에 술집에서 만났습니다!"라는 메시지가 있습니다. 반면에 확립 된 우정에는 일반적으로 관련된 우정이 없습니다. 따라서 이러한 서로 다른 유형의 관계를 데이터베이스의 다른 테이블에 저장하는 것이 좋습니다.

+0

마크, 기본적으로 내가 사용하고있는 미묘한 종류입니다. 명확하게 의사 소통을 할 수 없었습니다. "이미이 사용자에게 요청을 보냈습니다"메시지를 보내지 않는 것이 가장 좋다고 생각합니까 아니면 메시지가 무시 된 후에도 메시지가 계속 표시되어야한다고 생각하십니까? –

+0

카슨 마이어스 (Carson Myers)가 말한 것에 대해 실제로 고려해보고 싶습니다. 현재 스키마에서 누가 누구를 무시하는지 구분하는 방법을 실제로 고려하지 않았습니다. –

1

누가 무시했는지 구분하는 방법은 무엇입니까? 만약 한 친구가 다른 친구를 무시한다면, 나는 ENUM이 '무시'로 바뀌고, 무시당한 친구도 무시한 친구가 될 것이라고 생각합니다. 당신은 당신을 무시한 것처럼 보이기 때문에 누가 당신을 무시했는지 말할 수 있습니다.

ignore(ignorer, ignoree)과 같은 중간 테이블을 넣는 것이 더 좋으며, 열은 그냥 친구 ID입니다. 그런 식으로 메시지가 업데이트 될 때마다 ... 한 친구에게 전송되는이 앱은 대상 친구가 원본 친구를 무시하고 있는지 여부를 먼저 확인합니다.

1

저는 이것을 최근에 응용 프로그램에서 구현했습니다. 사실 데이터베이스에 두 개의 행이 있습니다. 내 열은 sourceUserId 및 destUserId입니다.누군가 (사람 A)가 다른 사람 (사람 B)에게 요청을 보내면 A의 UserId가 sourceUserId이고 B의 UserId가 destUserId 인 행이 자동으로 삽입됩니다. 그들이 다시 보내면 행이 이미 있음을 알게됩니다. B가 A를 승인하도록하려면 B의 UserId를 sourceUserId로, A의 UserId를 destUserId로 삽입하십시오.

내 애플리케이션에도 알림 표가 있으므로 다른 사용자 (예 : A의 UserId = sourceUserId 및 B의 UserId = destUserId가 삽입 된 행)를 추가 할 때마다 알림이 대상으로 전송됩니다.

두 사람이 친구인지 확인하려면 단순히 상호 행이 있는지 확인하십시오.

0

예 : 사용자 A가 그/그녀의 요청이 무시되었다는 것을 모르는 : 사용자 B에 사용자 A 보낸 친구 요청, 사용자 B가이 요청을 무시했다. 사용자 A에게이 요청 상태는 '대기 중'으로 표시되어야합니다. 같은 2 사용자의

: 비록 사용자 B 지워야합니다 사용자 A. 이러한 행동과 친구가되기 위해 시도 할 수없는 A의 요청은 반드시 해당 사용자 B를 수반하지 않는 사용자가 이전 사용자의 '무시'무시 A의 요청 (일어난 적이없는 것처럼).

테이블 스키마가 괜찮습니다. 가능한 모든 시나리오의 언어와 논리를 생각하면됩니다.

관련 문제