2014-10-30 4 views
-2

У меня есть запросы к базе данных mysql. Эти запросы возвращаются к значениям массива, и мне нужно поместить эти массивы в таблицу. Первая строка связана со второй строкой. Первый запрос содержит группу всех рабочих мест в производственной линии. Второй запрос содержит классификацию работников на каждом рабочем месте, на производственной линии и на рабочем месте.PHP ставит два результата запроса в таблицу

Давайте посмотрим:

первый ряд - Рабочие места

Вторая строка - Классификация

enter image description here

В таблице связи представляют классификацию работника на каждом рабочем месте.

Мне нужно связать первую строку со второй строкой, но не знаю, как я это делаю.

Пожалуйста, помогите.

+0

почему мой вопрос остается неясным или не полезно? – JoaoVM

+0

Похоже, вы должны получать все эти данные с помощью одного запроса LEFT JOIN. –

+0

У меня есть простой запрос, чтобы вернуть все рабочие места на стол. И у вас есть второй запрос, чтобы вернуть рабочие места и классифицировать работника на определенные рабочие места, второй запрос использует внутренние соединения. – JoaoVM

ответ

0

С помощью этого запроса я могу искать рабочее место и классификацию

SELECT DISTINCT PT.ID_WORKPLACE, F.WORKER, F.CLASSIFICATION, PT.LINE 
    FROM WORKPLACE_FORMATION PF 
    LEFT JOIN FORMATION F ON PF.ID_FORMATION=F.ID_FORMATION 
    RIGHT JOIN WORKPLACE_FORMATION PT ON PF.ID_WORKPLACE=PT.ID_WORKPLACE 
    WHERE F.WORKER=1234 
    OR F.WORKER IS NULL 
    AND PT.LINE=126; 

И PHP код поместить данные в таблице: «;

echo '<tr>'; 
echo '<td colspan="'.$postos_numero.'">Postos de Trabalho</td>'; 
echo '</tr>'; 

echo '<tr align="center" valign="middle" class="tabelas">'; 
while ($registo_postos = mysql_fetch_array($resultado_pesquisa_entre_datas)) 
    { 

echo '<td>'; 
echo "".$registo_postos['POSTO'].""; 
     echo '</td>';} 
     echo '</tr>'; 
echo '<tr align="center" valign="middle" class="tabelas">'; 
while ($registo_postos_d = mysql_fetch_array($resultado_pesquisa_colab_linha_desmp)) 
    { 
if ($registo_postos_d['DESEMP'] == NULL){ 

echo '<td>'; 
echo "<img height='20' width='20' src='./img/x.png' title='Sem formação neste posto de trabalho'>"; 
echo '</td>'; 

}elseif($registo_postos_d['DESEMP'] == 1){ 

echo '<td>'; 
echo "<img height='20' width='20' src='./img/!.png' title='Produz com supervisão'>"; 
echo '</td>'; 

}elseif($registo_postos_d['DESEMP'] == 2){ 

echo '<td>'; 
echo "<img height='20' width='20' src='./img/v.png' title='Produz sem supervisão e está apto a dar formação'>"; 
echo '</td>'; 

     }} 
    echo '</tr>'; 

echo '</table>'; 

?> 

увидеть результат на рисунке: http://s18.postimg.org/4i163rtuh/image_result.png

0

Не видя таблицы базы данных, трудно дать конкретный ответ, но в целом я хотел бы использовать левое соединение ваших рабочих мест с рабочими местами. Для этого примера, я буду считать структуру таблицы, как это:

рабочих мест:

workplace_id - autoincrment primary key 
workplace_label - name to be used for display 
[other workplace data fields] - not important for this example 

workplace_id workplace_label 
1    0001 
2    0002 
... 

рабочие:

worker_id - autoincrement primary key 
[other worker data fields] - not important for this example 

workers_workplaces:

workplace_id - part of compound primary key with worker_id 
worker_id - part of compound primary key with workplace_id 

запрос для получения данных вы можете посмотреть, как это:

SELECT 
    wp.workplace_label AS workplace, 
    COUNT(wwp.worker_id) AS worker_count 
FROM workplaces AS wp 
LEFT JOIN worker_workplaces AS wwp 
    ON wp.workplace_id = wwp.workplace_id 
GROUP BY workplace 

Это возвращает данные как

workplace  worker_count 
0001   0 
0002   0 
0003   2 
0004   1 
... 

Примечание, я на самом деле не использовать workers таблицу в запросе не было необходимости. Я просто хотел объяснить существование этой таблицы, чтобы вы могли видеть, как таблицы workers_workplaces связывают две другие таблицы вместе.

При чтении из набора результатов в PHP вы, вероятно, сделать что-то вроде:

$workplace_array = array(); 
while ($row = /* your DB fetch here */) { 
    $workplace_array[$row['workplace'] = $row['worker_count']; 
} 

Это дает ассоциативный массив с рабочим местом этикеток в качестве ключей. Если вы хотите просто получить метки рабочего места (например, чтобы отобразить строку заголовка в таблице.Вы можете легко получить, что, как:

$workplace_labels = array_keys($workplace_array); 
+0

см. Эту схему изображения http://s30.postimg.org/n3uu1etlt/Captura_de_tela_2014_10_30_14_26_21.png – JoaoVM

+0

ОК, этот запрос возвращает все рабочие места, классификацию работников и идентификатор рабочего. Я попробую поставить его на html-таблицу, чтобы сделать то же самое, что и в изображении вопроса. SELECT DISTINCT PT.ID_WORKPLACE, F.WORKER, F.CLASSIFICATION, PT.LINE ОТ WORKPLACE_FORMATION ПФ LEFT JOIN ФОРМИРОВАНИЯ Р О PF.ID_FORMATION = F.ID_FORMATION RIGHT JOIN WORKPLACE_FORMATION СТ ПО PF.ID_WORKPLACE = PT.ID_WORKPLACE где Р .WORKER = 1234 ИЛИ F.WORKER IS NULL И PT.LINE = 126; – JoaoVM

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