2012-08-15 2 views
1

먼저 내가하려는 작업에 대해 자세히 설명합니다. 나는 사용자가 단어를 쓰는 온라인 게임 시스템을 가지고 있는데, 이것은 어떤 값을 가진 데이터베이스에 게시된다. 이 모든 것이 잘 작동합니다. 여기 올바른 데이터베이스 항목을 검색하는 일부 데이터베이스 로직

는 데이터베이스 항목의 예입니다 : 이제 문제

uniqueID victim  rival wordguess won 
    6  607260120 504374351  Gg  0 

, 많은 희생자가 많은 라이벌 게임을 시작할 수 있습니다, 피해자의 검사를 수행하는 방법을 그들에 시작한 게임을 가지고, 그리고 그들은을 시작했다고 사람에 대한 게임?

$query = "SELECT `rival` FROM currentgames WHERE `victim` = '$victim'"; 
echo $row["rival"].","; 

그리고 피해자에 대한 주위의 반대 방향 :

나는이 개 PHP의 현재이 라인이 일을 확인하는 데 사용되는 파일이 있습니다.

이제 내 자바에서 내가 지금처럼 listarray 어댑터의 현재 값을 확인하고 있습니다 :

for (int i = 0;i<NetPlay.rivalArray.length-1;i++) 
     { 
      Log.i("VICTIM ARRAY DATA ", NetPlay.rivalArray[i]); 

      if (NetPlay.rivalArray[i].equals(f.id)) 
      { 
       ingame = true; 
       break; 

      } 
      else 
      { 
       ingame = false; 

      } 
     } 

     for (int i = 0;i<NetPlay.victimArray.length-1;i++) 
     { 
      Log.i("RIVAL ARRAY DATA ", NetPlay.victimArray[i]); 

      if (NetPlay.victimArray[i].equals(NetPlay.myId)) 
      { 
       battle = false; 
       break; 
      } 
      else 
      { 
       battle = true; 

      } 

     } 

     if (battle.equals(false)) 
     { 
      battleBtn.setVisibility(View.INVISIBLE); 
     } 
     else 
     { 
      battleBtn.setVisibility(View.VISIBLE); 
     } 

     if (ingame.equals(true)) 
     { 
      newgameBtn.setVisibility(View.INVISIBLE); 
     } 
     else 
     { 
      newgameBtn.setVisibility(View.VISIBLE); 
     } 

을 이상하게도, 나는 그들이 이미 상대에 대한 일치를 초기화 여부에 상관없이 선수들이 보여 얻을 수있는, 따라서 "새 게임"단추가 숨겨져 있지만 게임 승인 단추가 제대로 작동하지 않습니다. 데이터베이스와 SQL은 분명히 내 약점이며이를 해결하는 적절한 방법을 찾아 내지 못합니다. 초기 아이디어는 각 사용자/희생자에게 데이터베이스 내에서 자신의 테이블을 제공하는 것이었지만, 다른 UserId의 테이블 내에서 그들과 게임을 비교하는 문제는 매우 지저분 해졌습니다.

나는 또한 목록보기 어댑터 내부에서 진행되므로 추가해야합니다. 각 목록보기 항목에 대해 f.id 변경 사항이 적용되므로 각 목록보기 어댑터마다 이러한 확인 작업이 수행됩니다. 초점은 그것을 작동시키고 거기에서 최적화하는 것입니다.

또한 "새로운 게임"버튼이 완벽하게 작동합니다. 두 번째 버튼은 거의 동일한 종류의 것이라고 생각했지만 어떤 방식으로 작동 되든 상관없이 작동하지 않습니다. 그저 내가 간과하고있는 것이 확실하다. 아이디어가 있으십니까?

오케이 저는이 사람이 당신에게 게임을 시작했는지 확인하기위한 SQL 문이 아무 것도 반환하지 않기 때문에 분명히 잘못되었지만 그럴 수 없다는 사실을 좁혔습니다. 무엇이 잘못되었는지 알아 내고, 나는 모든 종류를 시도했다!

+0

무슨 일입니까? 게임 수락 후에도 게임 수락 버튼이 항상 표시됩니까? – Jim

+0

PHP 스크립트에서 일부 코드를 제거 했습니까? 네가 그렇게했다면, 아무것도 출력되지 않을 것이기 때문에, 당신이 한 것은 문자열을 만드는 것 뿐이다. – Duniyadnd

+0

예 저는 관련성이 있다고 생각되는 부분 만 모든 코드를 포함시키지 않았고 모두 잘 작동하며 예상대로 작동하지 않습니다. 문제는 "Accept Battle"버튼이 누군가의 게임을 받아들이는 것처럼 보일 것입니다. 당신은, 그러나 내가 뭘하든 상관없이 제대로 표시 할 수는 없지만, 모든 사람들에게 보여 주거나 모든 사람들에게 숨길 수도 있습니다. –

답변

0

누군가 이미 경기를하고있는 플레이어를 모두 선택하지 마십시오. 대신, 같은 쿼리 : 돌아 오는 행을 얻을 중 하나,이 방법을

SELECT `uniqueID` 
FROM currentgames 
WHERE (`victim` = '$victim' AND `rival` = '$rival') 
OR (`victim` = '$rival' AND `rival` = '$victim'); 

를하거나하지 않습니다, 당신은 행을 통해 확인 할 필요가 없습니다 것은 행 중 하나가 있는지 반환 문제. 이렇게하면 Accept 논리에 대한 작업이 훨씬 쉬워집니다.

+0

그러면 개별 게임에 대한 고유 ID가 생깁니 까? 나는 그것이 벌써 겪어 왔던 것에 꽤 유사하기 때문에 이것이 고칠 것이라고 확신하지 않는다. 단지 이것은 훨씬 더 효율적이다. –

+0

Ok. 그렇다면 '수락'버튼을 찾기 위해 필요한 조건은 무엇입니까? 게임을 찾았 으면하지만 다른 필드는 게임이 아직 받아 들여지지 않았 음을 나타내는 특별한 가치가 있습니까? –

+0

일단 게임이 끝나면 현재 데이터베이스에서 삭제되므로 허용 여부, 존재 여부 등을 감지하는 데 아무런 문제가 없습니다. rivalid = currentrivalid (목록보기에서)이고 victimID = myID 인 경우 현재 에 대한 검사를하고 있습니다. 그러나 작동하지 않는 것 같습니다. –

관련 문제