2013-12-16 1 views
1

userID 당 14 개의 행을 반환하는 SQL 쿼리가 있습니다.SQL 결과에서 큰 배열 필터링

다른 필드를 확인하기 위해 많은 양의 데이터를 가져 오지만 구체적으로 반환되는 것은 성과 이름이 필요합니다. 내가 $firstName[]=$row2[0];에서 얻을 수있는 첫 번째 이름은하지만 나는 배열에서 마지막 이름 값을 가져올 수 없습니다. 나는 그 위치를 볼 수는 있지만 루프에서 그 위치를 호출하는 방법을 모르겠습니다.

echo '<table border=1><tr><td>Student ID</td><td>Full Name</td><td>Class</td></tr>'; 


    //Build Student Info1 table 
    foreach($userID as $val) { 
    $user_id= $val; 
    $query="SELECT * FROM wp_usermeta WHERE meta_key ='purchased_instances' AND user_id ='$user_id'"; 
    $query2="SELECT meta_value FROM wp_usermeta WHERE user_id ='$user_id'"; 

    $result = $link->query($query)or die($link->error); 
    $result2 = $link->query($query2)or die($link->error); 



    if($result->num_rows > 0){ 
    /* fetch associative array */ 

     $i=0; 
     while ($row = mysqli_fetch_array($result)) { 
      while($row2 = mysqli_fetch_array($result2)) { 

       $details[$i][]=$row2; 
       $firstName[]=$row2[0]; 
       $lastName[]=$row2[0]; //Can't get this value right, need the first element of the 2 indexed array 

      } 

      $result1[]=$row; 
      $studentID[$i]=$row[1]; 
      $classDetails[$i]=$row[3]; 

      echo'<tr><td>'; 
      print_r($studentID[$i]); 
      echo '</td><td>'; 
      print_r($firstName[$i]); 
      echo ' '; 
      print_r($lastName[$i]); 
      echo'</td><td>'; 
      print_r($classDetails[$i]); 
      echo '</td></tr>'; 


      $i++; 
     } 
/* free result set */ 
mysqli_free_result($result); 
} 
} 
echo '</table>'; 

print_r($details)가 생성하는 것입니다 :

Array ([0] => Array ([0] => 2567 [umeta_id] => 2567 [1] => 185 [user_id] => 185 [2] => first_name [meta_key] => first_name [3] => Kevin [meta_value] => Kevin) [1] => Array ([0] => 2568 [umeta_id] => 2568 [1] => 185 [user_id] => 185 [2] => last_name [meta_key] => last_name [3] => RealLastNameHERE [meta_value] => RealLastNameHERE) [2] => Array ([0] => 2569 [umeta_id] => 2569 [1] => 185 [user_id] => 185 [2] => nickname [meta_key] => nickname [3] => KMOwner [meta_value] => KMOwner) [3] => Array ([0] => 2570 [umeta_id] => 2570 [1] => 185 [user_id] => 185 [2] => description [meta_key] => description [3] => [meta_value] =>) [4] => Array ([0] => 2571 [umeta_id] => 2571 [1] => 185 [user_id] => 185 [2] => rich_editing [meta_key] => rich_editing [3] => true [meta_value] => true) [5] => Array ([0] => 2572 [umeta_id] => 2572 [1] => 185 [user_id] => 185 [2] => comment_shortcuts [meta_key] => comment_shortcuts [3] => false [meta_value] => false) [6] => Array ([0] => 2573 [umeta_id] => 2573 [1] => 185 [user_id] => 185 [2] => admin_color [meta_key] => admin_color [3] => fresh [meta_value] => fresh) [7] => Array ([0] => 2574 [umeta_id] => 2574 [1] => 185 [user_id] => 185 [2] => use_ssl [meta_key] => use_ssl [3] => 0 [meta_value] => 0) [8] => Array ([0] => 2575 [umeta_id] => 2575 [1] => 185 [user_id] => 185 [2] => show_admin_bar_front [meta_key] => show_admin_bar_front [3] => true [meta_value] => true) [9] => Array ([0] => 2576 [umeta_id] => 2576 [1] => 185 [user_id] => 185 [2] => wp_capabilities [meta_key] => wp_capabilities [3] => a:1:{s:10:"subscriber";b:1;} [meta_value] => a:1:{s:10:"subscriber";b:1;}) [10] => Array ([0] => 2577 [umeta_id] => 2577 [1] => 185 [user_id] => 185 [2] => wp_user_level [meta_key] => wp_user_level [3] => 0 [meta_value] => 0) [11] => Array ([0] => 2578 [umeta_id] => 2578 [1] => 185 [user_id] => 185 [2] => mgm_member_options [meta_key] => mgm_member_options [3] => a:35:{s:2:"id";i:185;s:13:"custom_fields";a:6:{s:10:"first_name";s:5:"Kevin";s:9:"last_name";s:13:"RealLastNameHERE";s:5:"email";s:23:"RealEmailAddressHERE";s:8:"username";s:7:"RealuserNameHERE";s:8:"password";s:16:"Lwp9E8RZECyB9bzb";s:13:"password_conf";N;}s:22:"other_membership_types";a:0:{}s:12:"payment_info";a:0:{}s:6:"coupon";a:2:{s:12:"update_usage";b:0;s:15:"coupon_usage_id";b:0;}s:7:"upgrade";a:1:{s:6:"coupon";a:0:{}}s:6:"extend";a:0:{}s:4:"code";s:10:"mgm_member";s:4:"name";s:10:"Member Lib";s:11:"description";s:10:"Member Lib";s:7:"setting";a:0:{}s:6:"saving";b:1;s:8:"trial_on";i:0;s:10:"trial_cost";d:0;s:14:"trial_duration";i:0;s:19:"trial_duration_type";s:1:"d";s:16:"trial_num_cycles";i:0;s:8:"duration";i:1;s:13:"duration_type";s:1:"l";s:6:"amount";d:0;s:8:"currency";s:3:"USD";s:9:"join_date";i:1383183050;s:13:"last_pay_date";s:0:"";s:11:"expire_date";s:0:"";s:15:"membership_type";s:4:"free";s:6:"status";s:6:"Active";s:12:"payment_type";s:0:"";s:13:"autoresponder";s:10:"mgm_aweber";s:10:"subscribed";s:1:"Y";s:22:"autoresponder_notified";s:1:"Y";s:13:"user_password";s:16:"Lwp9E8RZECyB9bzb";s:17:"active_num_cycles";i:1;s:7:"pack_id";s:2:"22";s:12:"account_desc";s:12:"Free Account";s:16:"hide_old_content";s:1:"0";} [meta_value] => a:35:{s:2:"id";i:185;s:13:"custom_fields";a:6:{s:10:"first_name";s:5:"Kevin";s:9:"last_name";s:13:"RealLastNameHERE";s:5:"email";s:23:"RealuserNameHERE";s:8:"username";s:7:"RealuserNameHERE";s:8:"password";s:16:"Lwp9E8RZECyB9bzb";s:13:"password_conf";N;}s:22:"other_membership_types";a:0:{}s:12:"payment_info";a:0:{}s:6:"coupon";a:2:{s:12:"update_usage";b:0;s:15:"coupon_usage_id";b:0;}s:7:"upgrade";a:1:{s:6:"coupon";a:0:{}}s:6:"extend";a:0:{}s:4:"code";s:10:"mgm_member";s:4:"name";s:10:"Member Lib";s:11:"description";s:10:"Member Lib";s:7:"setting";a:0:{}s:6:"saving";b:1;s:8:"trial_on";i:0;s:10:"trial_cost";d:0;s:14:"trial_duration";i:0;s:19:"trial_duration_type";s:1:"d";s:16:"trial_num_cycles";i:0;s:8:"duration";i:1;s:13:"duration_type";s:1:"l";s:6:"amount";d:0;s:8:"currency";s:3:"USD";s:9:"join_date";i:1383183050;s:13:"last_pay_date";s:0:"";s:11:"expire_date";s:0:"";s:15:"membership_type";s:4:"free";s:6:"status";s:6:"Active";s:12:"payment_type";s:0:"";s:13:"autoresponder";s:10:"mgm_aweber";s:10:"subscribed";s:1:"Y";s:22:"autoresponder_notified";s:1:"Y";s:13:"user_password";s:16:"Lwp9E8RZECyB9bzb";s:17:"active_num_cycles";i:1;s:7:"pack_id";s:2:"22";s:12:"account_desc";s:12:"Free Account";s:16:"hide_old_content";s:1:"0";}) [12] => Array ([0] => 2579 [umeta_id] => 2579 [1] => 185 [user_id] => 185 [2] => _wpsc_customer_profile [meta_key] => _wpsc_customer_profile [3] => a:5:{s:16:"shipping_country";s:2:"US";s:15:"billing_country";s:2:"US";s:15:"shipping_region";s:2:"22";s:14:"billing_region";s:2:"22";s:4:"cart";s:1056:"O:9:"wpsc_cart":37:{s:16:"delivery_country";s:2:"US";s:16:"selected_country";s:2:"US";s:15:"delivery_region";s:2:"22";s:15:"selected_region";s:2:"22";s:24:"selected_shipping_method";N;s:24:"selected_shipping_option";N;s:24:"selected_shipping_amount";N;s:6:"coupon";N;s:14:"tax_percentage";N;s:9:"unique_id";s:40:"905310a45d51d75129b9de961ae17f69a7129ced";s:6:"errors";a:0:{}s:9:"total_tax";N;s:13:"base_shipping";N;s:19:"total_item_shipping";N;s:14:"total_shipping";N;s:8:"subtotal";N;s:11:"total_price";N;s:13:"uses_shipping";N;s:13:"is_incomplete";b:1;s:10:"cart_items";a:0:{}s:9:"cart_item";N;s:15:"cart_item_count";i:0;s:17:"current_cart_item";i:-1;s:11:"in_the_loop";b:0;s:16:"shipping_methods";b:0;s:15:"shipping_method";N;s:21:"shipping_method_count";i:1;s:23:"current_shipping_method";i:-1;s:18:"in_the_method_loop";b:0;s:15:"shipping_quotes";a:0:{}s:14:"shipping_quote";N;s:20:"shipping_quote_count";i:0;s:22:"current_shipping_quote";i:-1;s:17:"in_the_quote_loop";b:0;s:12:"coupons_name";s:0:"";s:14:"coupons_amount";i:0;s:15:"shipping_option";N;}";} [meta_value] => a:5:{s:16:"shipping_country";s:2:"US";s:15:"billing_country";s:2:"US";s:15:"shipping_region";s:2:"22";s:14:"billing_region";s:2:"22";s:4:"cart";s:1056:"O:9:"wpsc_cart":37:{s:16:"delivery_country";s:2:"US";s:16:"selected_country";s:2:"US";s:15:"delivery_region";s:2:"22";s:15:"selected_region";s:2:"22";s:24:"selected_shipping_method";N;s:24:"selected_shipping_option";N;s:24:"selected_shipping_amount";N;s:6:"coupon";N;s:14:"tax_percentage";N;s:9:"unique_id";s:40:"905310a45d51d75129b9de961ae17f69a7129ced";s:6:"errors";a:0:{}s:9:"total_tax";N;s:13:"base_shipping";N;s:19:"total_item_shipping";N;s:14:"total_shipping";N;s:8:"subtotal";N;s:11:"total_price";N;s:13:"uses_shipping";N;s:13:"is_incomplete";b:1;s:10:"cart_items";a:0:{}s:9:"cart_item";N;s:15:"cart_item_count";i:0;s:17:"current_cart_item";i:-1;s:11:"in_the_loop";b:0;s:16:"shipping_methods";b:0;s:15:"shipping_method";N;s:21:"shipping_method_count";i:1;s:23:"current_shipping_method";i:-1;s:18:"in_the_method_loop";b:0;s:15:"shipping_quotes";a:0:{}s:14:"shipping_quote";N;s:20:"shipping_quote_count";i:0;s:22:"current_shipping_quote";i:-1;s:17:"in_the_quote_loop";b:0;s:12:"coupons_name";s:0:"";s:14:"coupons_amount";i:0;s:15:"shipping_option";N;}";}) [13] => Array ([0] => 2580 [umeta_id] => 2580 [1] => 185 [user_id] => 185 [2] => purchased_instances [meta_key] => purchased_instances [3] => Cardio Stretch/Flex on 11/04/2013 8:00 AM [meta_value] => Cardio Stretch/Flex on 11/04/2013 8:00 AM) 

============================== ===================================

새로운 작업 코드 :

echo '<table border=1><tr><td>Full Name</td><td>Class Purchased</td></tr>'; 


    //Build Student Info1 table 
    foreach($userID as $val) { 
    $user_id= $val; 
    $queryA="SELECT meta_value FROM wp_usermeta WHERE meta_key ='first_name' AND user_id ='$user_id'"; 
    $queryB="SELECT meta_value FROM wp_usermeta WHERE meta_key ='last_name' AND user_id ='$user_id'"; 
    $queryC="SELECT meta_value FROM wp_usermeta WHERE meta_key ='purchased_instances' AND user_id ='$user_id'"; 

    $resultA = $link->query($queryA)or die($link->error); 
    $resultB = $link->query($queryB)or die($link->error); 
    $resultC = $link->query($queryC)or die($link->error); 

    $numPurchases = $resultC->num_rows; 

    if($numPurchases > 0){ 

     $i=0; 
     foreach($resultA as $val){ 

       $fName[$i]=$val['meta_value'];; 
       $i++; 
     } 

     $i=0; 
     foreach($resultB as $val){ 

       $lName[$i]=$val['meta_value']; 
       $i++; 

     } 

     $i=0; 
     foreach($resultC as $val){ 

       $classDetails[$i]=$val['meta_value']; 
       $i++; 

     } 

     for($i=0; $i < $numPurchases; $i++){ 
     echo '<td>'; 
     print_r($fName[$i]); 
     echo ' '; 
     print_r($lName[$i]); 
     echo '</td><td>'; 
     print_r($classDetails[$i]); 
     echo '</td></tr>'; 


     } 

/* free result set */ 
mysqli_free_result($resultA); 
mysqli_free_result($resultB); 
mysqli_free_result($resultC); 
} 

} 에코 '';

답변

0

몇 가지 중요한 사항 :

  • 검증
  • 는 당신이 필요로하는 모든 것을 가져 루프
  • 하나 개를 사용하여 쿼리의 SQL을 실행하지 마십시오 사용자 입력
  • (동일한 테이블을 사용하고 있습니다) 연관 배열을 가져 오면 도움이 될 것입니다.
  • SELECT 이후에 *이 아닌 정확히 투영에 필요한 것을 지정하고 각 필드를 가져 SELECT foo, bar 같은 ... 여기

)는 위의 팁을 시작하는 데 도움이되는 몇 가지 코드 : 보안 정보를

<?php 

// Validate input, please note that prepared statements would be best. 
// Also note that we don't need mysql escape calls because we validate 
// that this is an actual integer value which can't contain anything 
// dangerous. If we'd be working with any kind of string, date, ... the 
// world would look different. 
if (!is_array($userID)) { 
    if (!is_int($userID)) { 
    throw new \RuntimeException; 
    } 
    $userIds = "= {$userID}"; 
} 
else { 
    $userIds = null; 
    $c  = count($userID); 
    for ($i = 0; $i < $c; ++$i) { 
    if (!is_int($userID[$i])) { 
     throw new \RuntimeException; 
    } 
    $userIds .= $userIds ? "," : "IN("; 
    $userIds .= $userID[$i]; 
    } 
    $userIds .= ")"; 
} 

// One query to rule them all and nice formatting for readability. 
$result = $link->query(
    "SELECT * 
    FROM `wp_usermeta` 
    WHERE `meta_key` = 'purchased_instances' 
    AND `user_id` {$userIds}" 
); 

// Now we fetch everything within a single loop. 
while ($row = mysqli_fetch_assoc($result)) { 
    print_r($row); 
} 

// That's it! 
mysqli_free_result($result); 

?> 
+0

덕분에, 나는 그것을 검토 할 것입니다. 새 코드와 같은 루프가 아닌 경우 어떻게 이러한 SQL 문을 실행합니까? 이러한 SQL 문을 JOIN 또는 더 나은 논리로 작성할 수 있습니까? 감사! – user3107710

+0

결과 행이 두 개 이상인 경우 루프가 하나 이상 필요합니다. 단일 루프를 사용하는 것이 가장 효율적인 방법입니다. 하나의 테이블 만 사용하기 때문에'JOIN' 또는'UNION'이 필요 없습니다. 만약 당신이 다른 테이블을 사용하고 있으며 필터링 기준이 두 테이블에서 가능하다면 ('user_id'와 같이)'INNER | LEFT JOIN'이 최선의 선택이 될 것입니다 – Fleshgrinder