2011-02-19 3 views
0

хорошо,
У меня есть 3 таблицы с внешними ключами на аналогичные слова:
реляционных баз данных с PHP

назначения:
idassignment,
idshift
idworker

Смещение:
idshift
имя

работник:
idworker
имя

Я сделал выбор (с помощью объединений, где это необходимо), который принимает все соответствующие данные из них.
Я хочу создать массив, похожий на структуру БД.

Сегодня я просто перебираю задания и использую ключи из этой таблицы
, чтобы посмотреть в смену и рабочий.

любой комментарий поможет.

пример:
(игнорировать поля, не указанные в конце примера) Я использую этот SQL:

SELECT 
    `assignment`.`assignmentid`, 
    `assignment`.`date`, 
    `assignment`.`shiftid`, 
    `assignment`.`workerid`, 
    `shift`.`ShiftsID`, 
    `shift`.`WorkersNum`, 
    `shift`.`ShiftsType`, 
    `shift`.`length`, 
    `worker`.`WorkerID`, 
    `worker`.`FirstName`, 
    `worker`.`LastName`, 
    `worker`.`Email`, 
    `worker`.`phone` 
    FROM `mydb`.`assignment` LEFT JOIN `mydb`.`shift` ON ShiftsID=shiftid 
    LEFT JOIN `mydb`.`worker` USING (`workerid`) 

с этими данными:

assigment 
(1,1,1), 
(2,2,1), 
(3,2,2) 

shift 
(1,"morning") 
(2,"lunch") 

worker 
(1,"john") 
(2,"doe") 

и я хочу массив смотреть таких как:

Array 
{ 
    [0]=>Array 
     { 
      [assignmentID]==>1; 
      [shift]==>Array 
       { 
        [shiftid]=1; 
        [name]="morning"; 
       } 
      [worker]==>Array 
       { 
        [idworker]=1; 
        [name]="john"; 
       } 
     } 
    [1]=>Array 
     { 
      [assignmentID]==>2; 
      [shift]==>Array 
       { 
        [shiftid]=2; 
        [name]="lunch"; 
       } 
      [worker]==>Array 
       { 
        [idworker]=1; 
        [name]="john"; 
       } 
     } 
    [2]=>Array 
     { 
      [assignmentID]==>3; 
      [shift]==>Array 
       { 
        [shiftid]=2; 
        [name]="lunch"; 
       } 
      [worker]==>Array 
       { 
        [idworker]=2; 
        [name]="doe"; 
       } 
     } 
} 

Я просто использовал функцию для каждой таблицы, которая возвращает мне массив для нее.

function shift(id) 
function worker(id) 

и я пересекаю назначение между датами. и назовите их и поместите их в массив;

+0

Просьба привести пример того, что вы хотите. –

+0

Я не большой поклонник или ORM.Но, возможно, ORM, как Doctrine (http://www.doctrine-project.org/), может помочь вам, если вы не знакомы с БД. – t00ny

+0

, пожалуйста, предоставьте то, что вы в настоящее время сделали - облегчает помощь –

ответ

0
$sql = /* your sql statement */; 
if (($data = mysql_query($sql)) !== false) 
{ 
    $details = array(); 
    while (($row = mysql_fetch_array($data)) !== false) 
    { 
    $details[] = array(
     'assignmentID' => $row['assignmentid'], 
     'shift' => array(
     'shiftid' => $row['ShiftsID'], 
     'name' => // i don't see `shift`.`name`, but that goes here 
    ), 
     'worker' => array(
     'idworker' => $row['WorkerID'], 
     'name' => $row['FirstName'] 
    ) 
    ); 
    } 

    // $details is now populated with the structure you were looking for. 
} 

Что-то в этом роде? Хотя ваши начальные имена столбцов базы данных и те, что в вашем запросе, не выравниваются, поэтому я немного запутался. Сделал все возможное для этого.

EDIT

могли бы также получить более творчески и проверить, если работник/сдвиг поставляются (учитывая левое соединение), а затем только добавить информацию массива для них, когда результаты возвращаются в запросе. например

$details[] = array(
    'assignmentID' => $row['assignmentid'] 
    'shift' => (!is_null($row['ShiftsID'])?array(
    ... 
):null), // null when there's no shift 
    'worker' => (!is_null($row['WorkerID'])?array(
    ... 
):null) // null when there's no worker 
); 
+0

Да, я прокомментировал, что я ищу общую идею здесь, спасибо, есть ли способ сделать что-то подобное без явного указания имен столбцов? – shevski

+0

@shevski: Как утверждали другие, вам нужно будет построить структуру базы данных в структуре объектов для PHP, а затем иметь код, который связывает их между PHP/DB. Однако много работы по внедрению. Я имею тенденцию воссоздавать классы на PHP, которые имитируют мою структуру БД, а затем передают запросы этим объектам, когда на них ссылаются. (например, LINQ будет делать, если вы знакомы с .NET) –

Смежные вопросы