2015-01-27 4 views
1

데이터베이스에서 데이터를 가져 오려는 경우 3 개의 테이블이 모두 연결되어 있습니다. 나는 문제가있다. 나는 많은 방법을 시도했다. merge, unique and separate list. 다음 코드는 입니다. 데이터베이스에서 특정 데이터를 가져 오는 방법

<?php 
$conn=new mysqli("localhost","root","","db"); 

$rows=$conn->query("select Account,Amount, event_name,event_description from donations 
        LEFT JOIN accounts 
        ON accounts.ID_Account=donations.ID_Account 
        LEFT JOIN events 
        ON events.event_id=donations.event_id "); 
$rows1=$conn->query("SELECT Account from accounts"); 

while((list($Account, $Amount, $event_name,$event_description)=$rows->fetch_row()) and (list($Account)=$rows1->fetch_row())) 
{ 
echo "<tr><td> $Account</td><td> $Amount </td><td>$event_name</td><td>$event_description</td></tr>";  
} 
?> 

지금 문제는, 그것은 계정에서 중복 된 데이터를 보여줍니다 또한 나는 더 기부 $Amount 계정 $Account에 대한가없는 경우는 Account 앞에 기부금을 보여주지해야처럼되고 싶어하지만, 보여주고있다 . 내가 원하는 방식대로 작동하도록 할 수있는 방법이 있습니까? 많은 감사.

+1

일예를 한 계정에 대해 여러 이벤트가있는 경우 해당 계정에 대해 여러 행을 얻을 수 있습니다. – jarlh

+0

나는 그 기부금이 그 계좌에 속하는지 아닌지에 관계없이 모든 기부를 보여주는 것처럼 임의의 데이터를 얻습니다. ** Account-> Donation-> Event **와 같은 데이터를 원합니다. 표시됩니다. –

답변

0

데이터 수화 방법을 찾고 있습니다. 이제는 다중 조인을 수행하기 때문에 결과 데이터와 함께 A * B * C = X 행을 얻을 수 있습니다. 결과로 생성되는 mysql의 배열은 항상 하나의 차원을 가지므로 중복되는 데이터가 많습니다.

원하는 것은 둘 이상의 차원이있는 배열 (또는 객체)입니다. 난 당신과 같이있는 결과 배열을 원하는 가정

  1. 당신의 결과
  2. 을에서 값을 갖는 새 배열을 만들기 위해 자신의 데이터 수화 방법을 쓰기 :

    $result = array(
        'account1' => array('event1', 'event2'), 
        'account1' => array('event3', 'event4', 'event5') 
    ); 
    

    여러 이에 대한 해결책이 있습니다 JOIN을 사용하는 하나의 쿼리 대신 3 개의 단일 쿼리를 수행 한 다음 결과를 병합하십시오 (심지어 더 빨라질 수도 있습니다).

  3. Doctrine (php 데이터베이스 추상화 계층)을 사용하면 원하는만큼 정확하게 문제를 해결할 수 있습니다.

당신은 당신에게) 새로운 응용 프로그램 내가 3. 추천을 코딩 시작하는 경우 :

http://doctrine-orm.readthedocs.org/en/latest/tutorials/getting-started.html

+0

감사합니다. 나는 그들에게 시도해 볼 것입니다. btw 위의 코드에서 \t 나는 그 계좌에 속하는지 여부와 상관없이 모든 기부를 보여주는 임의의 데이터를 얻습니다. ** Account-> Donation-> Event **와 같은 데이터를 원하고 기부가없는 경우 계정의 경우 ** 계정 ** 만 표시되어야합니다. –

+0

두 번째 방법을 시도했지만 결과는 동일합니다. 즉 임의의 데이터입니다. –

+0

1과 3은 이해하기 어렵습니다. 비록 내가 1과 3을 나중에 시도 할 것이지만, 나는 지금 쉽고 안정적인 것을 필요로한다. –

관련 문제