2011-01-27 4 views
2

MySQL과 PHP를 사용하여 데이터를 검색하고 표시하는 가장 좋은 방법에 대한 조언을 찾고 있습니다.PHP와 MySQL - 여러 개의 일대 다 관계를 효율적으로 처리하기

일정 많은 오버라이드 (override) 가지고 있으며, 각각의 재정 사항 많은이 있습니다 많은 관계

내가 3 개 테이블이 모든 일 다음과 같이. 이 데이터를 검색하여 단일 PHP 페이지에 모두 표시 할 수 있습니다. 내 스케줄을 나열하십시오. 각 일정 내에는 OVERRIDES가 표시되고 각 무시 목록에는 LOCATIONS가 표시됩니다.

옵션 1 -이 작업을 수행하는 가장 좋은 방법은 3 가지 별도의 SQL 쿼리를 작성한 다음 PHP 개체에 쓰는 것입니까? 그런 다음 각 배열을 반복하고 부모 배열에서 일치하는지 확인할 수 있습니다.

옵션 2 - 두 개의 오른쪽 조인을 수행하면 모든 3 개의 테이블에 모든 입구에 대한 행이 반환됩니다.

의견 및 의견을 보내 주시면 감사하겠습니다.

감사합니다.

답변

5

데이터의 모든 부분을 실제로 원한다면 아무리 많은 행을 검색해도됩니다. 하나의 쿼리로 모든 것을 얻는 것이 가장 좋습니다. 이 같은 결과를 주문하여

SELECT schedule.id, overrides.id, locations.id, locations.name 
FROM schedule 
JOIN overrides ON overrides.schedule_id = schedule.id 
JOIN locations ON locations.override_id = overrides.id 
ORDER BY schedule.id, overrides.id, locations.id 

, 당신은 결과 세트를 반복하고 다음 스케줄로 이동할 수 있습니다 때마다 scheduleid 변경하고 다음 위치 본 locationid 변경됩니다.

편집 : 3 차원 배열로 데이터를 설정하는 방법의 가능한 예 -

$last_schedule = 0; 
$last_override = 0; 
$schedules = array(); 

while ($row = mysql_fetch_array($query_result)) 
{ 
    $schedule_id = $row[0]; 
    $override_id = $row[1]; 
    $location_id = $row[2]; 
    $location_name = $row[3]; 
    if ($schedule_id != $last_schedule) 
    { 
    $schedules[$schedule_id] = array(); 
    } 
    if ($override_id != $last_override) 
    { 
    $schedules[$schedule_id][$override_id] = array(); 
    } 
    $schedules[$schedule_id][$override_id][$location_id] = $location_name; 
    $last_schedule = $schedule_id; 
    $last_override = $override_id; 
} 

아주 원시적 인, 당신의 코드가 서로 다른 모양 상상, 그러나 희망은 몇 가지 의미가 있습니다.

+0

+1 기본 db 개념입니다. –

+0

예 좋은 점, 같은 수의 행이 어느 쪽이든 반환됩니다. 디스플레이에 관해서는 각 일정을 페이지의 섹션으로 표시해야하며 각 일정 내에 위치가있는 각 재정의를 나열해야합니다. 배열을 잘 돌아가고 있어야합니다. 일정 ID가 변경되면 다음 일정으로 이동하는 것에 대한 귀하의 의견에 관심이 있습니다. 조언 해 줄 수 있니? 미리 감사드립니다. 단일 DB 쿼리를 진행하겠습니다. 감사합니다. – Ben

+0

나는 유용한 방향으로 당신을 가리킬 수있는 코드 샘플을 추가했다. – TehShrike

관련 문제