2014-03-24 2 views
3

enter image description hereMySQL의 복잡한 쿼리.

이상은 내가 그린 구성표입니다. content.user이 그룹화 된 이상적인 경우가 있습니다. 그러나 보통 그들은 그룹화되지 않습니다. 어떤 난이 방식에서 의도하는 것이다 : 첫번째 단계

  1. 번째 단계 users.id = content.user

  2. 는 I마다 content.cpcusers.monetos을 감소 어디 users.monetos을 선택 (2.1, 2.2)

  3. 이 시뮬레이션 경우

: 선택 content.user (9)

,691 users.id=content.users (15)

그래서 우리가 users.id=9에 대한 users.monetos 15 값을 가질 경우 363,210

users.monetos을 선택, 지금 우리는 내용 테이블 로 돌아가서 :

  1. 8 (content.cpc) (15와 15의 값을 감소 8 = 7> 0 -> 2)
  2. 감량 7 (이전 단계의 결과를) 단계로 이동 10 (content.cpc) (7-10 = -3 < 0 -> 업데이트 콘텐츠 설정 활성 = '0' 여기서 content.id = (현재 ID가 수득 부정 결과))에 대한

그리고 이런 모든 content.user

의 확장 - I = 1 (N)content.activecontet.* 행을 선택하고 싶다. 이 데이터가 있으면 SELECTusers.monetos WHERE users.id = content.user 이전 쿼리에서 가져온 것입니다. 최대 (N)에 의해 그리고 지금, 단계는 내가 content.cpc ** users.monetos = 0 또는 0보다 작은 경우는, 내가 content 및 SET를 업데이트 할 순간에 값 및 에 의해 users.monetos 값을 감소 각 내용 항목 (각 content.cpc) 활성 = '0'** 단어

, 나는 users.monetos를 공유하고 원하는 양. users.monetos이 없습니다. 현재 content 항목이 비활성화됩니다. 그리고이 모든 것을하십시오. content.user 나는 지금이 순간에 무엇을했는지 보여줍니다. 나는 지금 정말로 안좋아 보이지만, 나는 무엇을해야할지 이미 모른다.

$query = "select content.id, content.cpc, conent.user, content.active from content a 
join users b on a.user=b.id 
group by b.id where a.active='1'"; 

/** cycle each user **/ 
foreach($rows = $connector->fetchArray($query) as $row) { 
    $monetos = $row['monetos']; 
    $query = "select id, cpc from content where user={$row['id']}"; 
    /** cycle each users content **/ 
    foreach($contents = $connector->fetchArray($query) as $content) { 
     echo $monetos; 
     $monetos -= $content['cpc']; 
     if($monetos <= 0) { 
      $disable[] = $content['id']; 
     } 
    } 
    if(isset($disable)) { 
     $connector->query("update content set active='0' where id in(".implode(',',$disable).")"); 
    } 
} 
+0

그것은 당신을 돕기 위해 정말 열심히합니다. 그리고 당신이 복잡한 alghoritm을 구현하려고 할 때, 당신의 생각을 이해하기 쉽게 스키마를 만드는 것이 더 나을 것이라고 생각합니다. – CrazySabbath

+0

그냥 잠깐 내 –

+0

@ CrazySabbath 있습니다. 불행히도 고마워요. –

답변

0

당신은이 코드를 시도 할 수 있습니다 : 당신은 모든 데이터 예, 또는 적절한 테이블 구조를 제공하지 않을 때,

$query = "select * from users"; 
foreach($rows = $connector->fetchArray($query) as $row) { 
    $a=''; 
$query = "select * from content where user='{$row[id]}' and active='1' "; 
foreach($contents = $connector->fetchArray($query) as $content) { 
    $a++; 
    $a_min=$a-1; 
    $test[$a]=$row[monetos]-$content[cpc];  
    if($a==2){ 
     if($test[$a_min] > 0){ 
      $test2=$test[$a_min]-$content[cpc]; 
      if($test2 < 0){ 
       $connector->query("update content set active='0' where id='$content[id]'"); 
      } 
     } 
    } 
} 
} 
+0

감사합니다. –