2012-10-26 3 views
0

제목이 의미가 있기를 바랍니다. 그렇지 않다면 여기에서 설명하려고합니다. 첫째로, 내가 다루는 많은 코드처럼, 나는 이것을 계승했거나 단순히 그것을 감독하고 mysqli를 사용하여 다시 쓰려면 OK를받지 못했기 때문에 "지금 당신이 틀린 짓을하고있다." 미리 감사드립니다.새로운 MySQL 결과 세트를 만들기 위해 MySQL 연관 배열을 반복하십시오.

된 table_1이

+----+-----------+------------+ 
| id | from_name | from_email | 
+----+-----------+------------+ 
| 1 | John | [email protected] | 
| 2 | Juan | [email protected] | 
| 3 | Mark | [email protected] | 
| 4 | John | [email protected] | 
+----+-----------+------------+ 

같은 레이아웃을 가지고 그리고 내가 원하는 결과를 얻기 위해 본처럼 쿼리합니다.

<?php 

    $q = "SELECT `id` FROM `table_1` WHERE `from_email` = '[email protected]'"; 
    $r = mysql_query($q) or die(mysql_error()); // mysql_error is removed in production 
    $ids = mysql_fetch_assoc($r); 

?> 

는 지금은

1 
4 

가 지금은 이러한 ID를 가지고 Table_2의 WHERE 절에서 사용합니다,이 반복 내가 예상 결과를 얻을 화면에 ID를 인쇄 할 때 크기 정보를 보유하므로 모든 메시지의 전체 크기를 계산할 수 있습니다. Table_2는 이렇게 보입니다. 내가 크기를 얻을 것 동안 또는 foreach는 루프를 구성하고 나를 올바른을 추가 할 수있을 것입니다 내 원하는 솔루션을

+----+---------+------------+ 
| id | table_1 | size | 
+----+---------+------------+ 
| 1 | 1 | 44023 | 
| 2 | 2 |  372 | 
| 3 | 3 | 13243 | 
| 4 | 4 | 423115 | 
+----+---------+------------+ 

을 바탕으로? 나는 다음 시도했다 :

<?php 

    $total_size = 0; 
    while($ids = mysql_fetch_assoc($r)){ 
     $q2 = "SELECT `size` FROM `table_2` WHERE `table_1` = '".$ids['id']."'"; 
     $r2 = mysql_query($q2) or die mysql_error()); // removed in production 
     $add = mysql_fetch_assoc($r2); 

     $total_size = $total_size + $add['size']; 
    } 

?> 

을하지만 $ TOTAL_SIZE 반향 갈 때 나는 심지어 0 화면에 아무것도 볼 수와 MySQL에 의해 슬로우 오류가 없습니다. 원래이 테이블을 디자인했다면이 데이터는 모두 같은 테이블에 있었지만 내가하지 않았기 때문에 "작동하게"할 수 밖에 없었습니다. 그것의보기에서, 그것은 작동해야한다.

+0

'SELECT' 후에 여분의 큰 따옴표를 제거하십시오. – Jocelyn

+0

죄송합니다. 게시물의 모든 내용을 형식화하려고 시도하는 동안 오타가 발생했습니다. 나는 그것을 제거했다. – rws907

+0

테이블을 조인하고 예상 결과 집합을 계산하는 쿼리를 사용하지 않는 이유는 무엇입니까? 필자는 PHP가 계산에 필요하다고 생각하지 않습니다. – Jocelyn

답변

1

@Michael Berkowski - INNER JOIN 및 SUM() SELECT 문에 감사드립니다. 완벽하게 작동합니다.

"하나의 쿼리에서 다음과 같은 쉬운 하위 쿼리 방법을 사용할 수 있습니다. SELECT size from FROM table_2 WHERE table_1 IN (SELECT id FROM table_1 WHERE email = '[email protected]') 또는 더 빠를 수있는 조인 방법 : SELECT size from FROM table_2 INNER JOIN table_1 ON table_2.table_1 = table_1.id WHERE table1.email = '[email protected]' "- Michael Berkowski

"그러면 하나의 페치 루프 만 있으면됩니다. 하나의 쿼리에서 COUNT()를 집계하고 거의 모든 PHP를 건너 뛰십시오. SELECT SUM (크기) FROM TABLE_2 INNER JOIN table_1 .... "- Michael Berkowski