2014-04-29 3 views
0

현재 pdo를 사용하여 데이터베이스 테이블에 액세스하는 PHP 스크립트를 작성 중입니다. 이 마지막 것을 알아 내려고하는 것입니다. 나는 여전히 PHP에 비교적 익숙하지 않고, 둘러 보면서 나 자신을 알아낼 수도있다. 나는 무엇을 찾아야할지 모른다.PHP PDO foreach 변수

나는 내가 가지고있는 것을 말할 것이다. 나는 서버라고 불리는 테이블을 가지고있다. location (USA, CANADA, MEXICO 및 EU는 각 행의 값입니다)이라는 열이 있습니다. 그런 다음 서버 테이블 (USA, CANADA, MEXICO 및 EU)에 해당하는 각 위치마다 다른 테이블이 있습니다. 그런 다음 위치가있는 각 테이블에 SLOTS라는 열이 있습니다. 첫 번째 행에 2가 있고 두 번째 행에 3이 있다고 말하면됩니다. 모두 합계를 구한 다음 변수에 넣고 싶습니다. 그런 다음 각각이됩니다. 동일한 페이지에 표시됩니다. 지금은 잘 작동하지만 더 많은 위치를 추가 할 때 가지고 싶습니다. 돌아가서 추가 할 필요가 없습니다. 서버 테이블의 위치 열에서 가져와 조금 더 깨끗하게 만듭니다. 그렇다. 나는 변수 변수를 조사하고 있었지만 그것이 작동하는지 또는이 상황에서 어떻게 작동하는지 알 수 없었다.

나는 여기

$usaresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM USA"); 
$usarow = $usaresult->fetch(PDO::FETCH_ASSOC); 
$usaslots = $usarow['value_sum']; 
if(!isset($usarow['value_sum'])) { 
    $usaslots = '0'; 
} 

$canadaresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM CANADA"); 
$canadarow = $canadaresult->fetch(PDO::FETCH_ASSOC); 
$canadaslots = $canadarow['value_sum']; 
if(!isset($canadarow['value_sum'])) { 
    $canadaslots = '0'; 
} 

$mexicoresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM MEXICO"); 
$mexicorow = $mexicoresult->fetch(PDO::FETCH_ASSOC); 
$mexicoslots = $mexicorow['value_sum']; 
if(!isset($mexicorow['value_sum'])) { 
    $mexicoslots = '0'; 
} 

$euresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM EU"); 
$eurow = $euresult->fetch(PDO::FETCH_ASSOC); 
$euslots = $eurow['value_sum']; 
if(!isset($eurow['value_sum'])) { 
    $euslots = '0'; 
} 

내가 생각하고 있었는데 뭔가가 작동하지 않고 완전히 꺼 아마도, 아마도 훨씬 더 나은 뭔가를 할 수 있지만, 무엇의 아이디어를 줄 것이다 가지고 무엇을 내가 찾는거야, 내 생각 엔?

$query = "SELECT * FROM servers"; 

try 
{ 
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
} 

catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 

foreach ($result as $row) { 
    ${$row['location']}result = $db->query("SELECT SUM(SLOTS) AS value_sum FROM $row['location']"); 
    ${$row['location']}row = ${$row['location']}result->fetch(PDO::FETCH_ASSOC); 
    ${$row['location']}slots = ${$row['location']}row['value_sum']; 
    if(!isset(${$row['location']}row['value_sum'])) { 
    ${$row['location']}slots = '0'; 
    } 
} 

아무도 나를 도와 줄 수 없거나 올바른 방향으로 나를 가리켜 주면 좋을 것입니다. 누구나 할 수 있다면 미리 감사드립니다.

+2

데이터를 재구성하십시오. 각 행에 대한 표를 갖는 것은 올바른 방법이 아닙니다. – h2ooooooo

+0

의견을 보내 주셔서 감사합니다. 흠, 나는 더 나은 방법이 없다면 각 테이블을 가질 필요가 있다고 생각합니다. 그리고 이미 테이블을 사용하고 테이블을 생성하고 새로운 테이블이 생성되면 서버 테이블에 삽입하는 모든 작업을 이미 마쳤습니다. . 각 위치에는 이름, 전자 메일, 시간, ips, 양식을 사용하여 삽입 한 슬롯이있는 행이 있어야합니다 ... 분리 된 테이블을 갖는 것이 어떤 문제를 일으키는 지 확신 할 수 없습니까? – J159753

+0

한 번만 새로운 위치를 추가하는 것이 훨씬 쉬워졌습니다. 직접 넣으면 다음과 같이됩니다. '그리고 조금 더 깨끗하게 만들어야합니다.' –

답변

0

왜이 깔끔하게 위치에 따라 슬롯을 요약합니다이

CREATE TABLE `servers` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `location` varchar(255) NOT NULL, 
    `slots` int(11) NOT NULL, 
    PRIMARY KEY (`ID`) 
) 

같은 예를 들어, 모든 서버에 대해 하나 개의 테이블이 다음이

SELECT location, slots from servers group by location 

처럼 쿼리하지, 당신은 할 수 있습니다 각 위치에 대해 여러 행을 추가 할 수 있으며 테이블을 추가하지 않고도 위치를 자유롭게 추가 할 수 있습니다.