Глядя на запрос базы данных ниже. я
присоединились к двум запросам "Это мое
сначала присоединиться, так что я не уверен, что я сделал
это правильно. "Это чтение
информация в обеих таблицах и
показывая это. Но приведенный ниже код
отображение каждой записи в «рабочем журнале»
который имеет запись в
Таблица «Рабочие журналы». Мне нужно это
отобразить одну запись из «рабочего журнала» и
много заметок из "рабочих заметок"
Да, вот как это работает, когда вы присоединяетесь. Вы получите запись рабочего журнала и запись рабочих заметок в виде одной строки. Это означает, что у вас будет одна и та же запись рабочего журнала несколько раз, если только у нее нет только одной рабочей заметки. Вам нужно разобраться с этим на стороне php, если вы хотите отобразить в какой-то иерархии.
Таким образом, если вы хотите, чтобы все рабочие журналы (или больше, чем jsut один на самом деле) и их заметки, вы использовали бы ваш запрос, а затем перебрали бы результаты для упорядочения, тогда, соответственно, предположим, что $result
- ваш ресурс mysql_result и $worklog_columns
и $worklognote_columns
содержат массив имен столбцов для каждой таблицы в формате 'column_name' => null
, тогда вы можете сделать что-то вроде следующего:
$worklog = array();
while(false !== ($record = mysql_fetch_assoc($result))){
// get only the data for a worklognote
$note = array(array_intersect_key($result, $worklognote_columns));
// get the primary key of the worklog
$id = $record['worklog_id'];
if(!isset($worklog[$id])){
// if we havent already processed this worklog form a previous row
// get the work log data in a separate array
$log = array_intersect_key($result, $worklog_columns);
// add a notes key which will hold an array of worklog_notes
// and assifn the note joined to this row as the first note
$log['notes'] = array($note);
}
else
{
// otherwise jsut append the not joined to this row
// to the existing worklog we processed
$worklog[$id]['notes'][] = $note;
}
}
Однако следует помнить, что если две таблицы, к которым вы присоединяетесь, имеют столбцы с одинаковым именем, то, если вы используете MYSQL_ASSOC, вы получите значение только из столбца объединенной таблицы, а не из обеих. Если вам нужен доступ к значению обеих таблиц, вам нужно либо использовать MYSQL_NUM или MYSQL_BOTH, либо псевдоним каждого столбца в вашем запросе.