2013-10-25 6 views
0

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

waitingroom 
    +----------------+-------------+ 
    | waitingroom_pk | waitingroom | 
    +----------------+-------------+ 
    |   1  | PATH2201 | 
    +----------------+-------------+ 
    |   2  | PATH2202 | 
    +----------------+-------------+ 

waitingroom_case_lookup 
    +----------------------------+----------------+---------+ 
    | waitingroom_case_lookup_pk | waitingroom_fk | case_fk | 
    +----------------------------+----------------+---------+ 
    |   1     | 1   | 1  | 
    +----------------------------+----------------+---------+ 
    |   2     | 1   | 2  | 
    +----------------------------+----------------+---------+ 
    |   3     | 2   | 3  | 
    +----------------------------+----------------+---------+ 
vcase 
    +---------+------------+------------+ 
    | case_pk | case_title | patient_fk | 
    +---------+------------+------------+ 
    | 1 | Case One |  1  | 
    +---------+------------+------------+ 
    | 2 | Case Two |  2  | 
    +---------+------------+------------+ 
    | 3 | Case Three |  3  | 
    +---------+------------+------------+ 

    patient 
    +------------+------------+-----------+---------+ 
    | patient_pk | first_name | last_name | case_fk | 
    +------------+------------+-----------+---------+ 
    | 1   | John  | Smith  | 1  | 
    +------------+------------+-----------+---------+ 
    | 2   | Will  | Jones  | 2  | 
    +------------+------------+-----------+---------+ 
    | 3   | Mary  | Ryan  | 3  | 
    +------------+------------+-----------+---------+ 

Запрос, который я использую:

SELECT * FROM 
waitingroom, waitingroom_case_lookup, vcase, patient 
WHERE vcase.patient_fk = patient.patient_pk 
AND waitingroom.waitingroom_pk = waitingroom_case_lookup.waitingroom_fk 
AND vcase.case_pk = waitingroom_case_lookup.case_fk 
AND vcase.active = 'y' 
AND vcase.case_pk NOT IN (SELECT case_fk FROM user_case_lookup WHERE user_id = '$user_id') 

Этот запрос возвращает результаты показаны три waitingrooms вместо два, предположительно, потому что в таблице waitingroom_case_lookup есть три записи. Я хочу, чтобы группировать данные vcase в соответствии с залами ожидания, используя waitingroom_case_lookup.

Что касается печати результатов, то залы ожидания отображаются как аккордеоны JQuery, и у меня есть вложенный цикл foreach, который показывает данные о случаях в каждом аккордеоне в зале ожидания. Проблема, как я уже говорил, состоит в том, что три комнаты ожидания показывают не две. Второй и третий аккордеоны приемной комнаты выглядят ОК, с case_pk один и два показаны во втором аккордеоне, а case_pk - три, показывающие в третьем. В первом аккордеоне также показан case_pk, и этот аккордеон не должен отображаться.

Результаты печатаются с помощью следующего кода:

<?php 
$waitingRooms = array(); 

while ($row_waitingrooms = mysql_fetch_assoc($result_waitingrooms)){ 

     if($row_waitingrooms['gender'] == 'f'){ 
       $gender = 'Female'; 
      } else if ($row_waitingrooms['gender'] == 'm'){ 
       $gender = 'Male'; 
      } 

     $waitingRoomPK = $row_waitingrooms['waitingroom_pk']; 

     if (!isset($waitingRooms[$waitingRoomPK])) { 
      $waitingRooms[$waitingRoomPK] = array(
       'waitingroom_pk' => $waitingRoomPK, 
       'waitingroom' => $row_waitingrooms['waitingroom'], 
       'cases' => array() 
      ); 
     } 

     $waitingRooms[$waitingRoomPK]['cases'][] = array(
      'case_pk' => $row_waitingrooms['case_pk'], 
      'patient_icon' => $row_waitingrooms['patient_icon'], 
      'first_name' => $row_waitingrooms['first_name'], 
      'last_name' => $row_waitingrooms['last_name'], 
      'age' => $row_waitingrooms['age'], 
      'gender' => $gender, 
      'presenting_complaint' => $row_waitingrooms['presenting_complaint'] 
     ); 



    echo "<h6>" . $row_waitingrooms['waitingroom'] . "</h6><div><p><span class='text'>"; 

    foreach ($waitingRooms[$waitingRoomPK]['cases'] as $wcase){ 
     echo "<table width='100%'><tr><td><input name='case' id='case_" . $wcase['case_pk'] . "' type='radio' value='" . $wcase['case_pk'] . "' /></td><td width='65' align='left'><div class='case_list'><img src='images/case_icons/" . $wcase['patient_icon'] . "' width='44' height='45' /></div></td><td width='350' align='left'>" . $wcase['first_name'] . ' ' . $wcase['last_name'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbspGender: ' . $wcase['gender'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age: ' . $wcase['age'] . '<br />Presenting Complaint: ' . $wcase['presenting_complaint'] . "</td></tr></table>"; 
     } 
    echo "</span></p></div>"; 
    } 
    ?> 

Я подозреваю, что запрос должен быть изменен для группы гармошку данных случая к таблицам waitingrooms, любые идеи, как я должен это делать?

EDIT

Благодаря developerCK теперь у меня есть следующий рабочий код:

<?php 
while ($row_waitingrooms = mysql_fetch_assoc($result_waitingrooms)){ 

    if($row_waitingrooms['gender'] == 'f'){ 
      $gender = 'Female'; 
     } else if ($row_waitingrooms['gender'] == 'm'){ 
      $gender = 'Male'; 
     } 

    $waitingRoomPK = $row_waitingrooms['waitingroom_pk']; 

    if (!isset($waitingRooms[$waitingRoomPK])) { 
     $waitingRooms[$waitingRoomPK] = array(
      'waitingroom_pk' => $waitingRoomPK, 
      'waitingroom' => $row_waitingrooms['waitingroom'], 
      'cases' => array() 
     ); 
    } 

    $waitingRooms[$waitingRoomPK]['cases'][] = array(
     'case_pk' => $row_waitingrooms['case_pk'], 
     'patient_icon' => $row_waitingrooms['patient_icon'], 
     'first_name' => $row_waitingrooms['first_name'], 
     'last_name' => $row_waitingrooms['last_name'], 
     'age' => $row_waitingrooms['age'], 
     'gender' => $gender, 
     'presenting_complaint' => $row_waitingrooms['presenting_complaint'] 
    ); 

} 

foreach($waitingRooms as $val){ 

echo "<h6>" . $val['waitingroom'] . "</h6><div><p><span class='text'>"; 

    foreach ($val['cases'] as $wcase){ 
     echo "<table width='100%'><tr><td><input name='case' id='case_" . $wcase['case_pk'] . "' type='radio' value='" . $wcase['case_pk'] . "' /></td><td width='65' align='left'><div class='case_list'><img src='images/case_icons/" . $wcase['patient_icon'] . "' width='44' height='45' /></div></td><td width='350' align='left'>" . $wcase['first_name'] . ' ' . $wcase['last_name'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbspGender: ' . $wcase['gender'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age: ' . $wcase['age'] . '<br />Presenting Complaint: ' . $wcase['presenting_complaint'] . "</td></tr></table>"; 
     } 
    echo "</span></p></div>"; 
} 

?> 
+0

Может ли вы сделать скрипку sql? – developerCK

+0

http://sqlfiddle.com/#!2/10e93/1 – IlludiumPu36

+0

Ваш запрос и PHP-код правы, просто ваш цикл foreach находится под циклом while, поместите его после и используйте вложенный foreach.and дайте мне знать, если это works – developerCK

ответ

1

использовать его после того, как во время цикла, и удалить свой цикл Еогеасп. Ваш запрос правильный. просто нужно изменить какой-либо код php

foreach(waitingRooms as $val){ 

echo "<h6>" . $val['waitingroom'] . "</h6><div><p><span class='text'>"; 

    foreach ($val['cases'] as $wcase){ 
     echo "<table width='100%'><tr><td><input name='case' id='case_" . $wcase['case_pk'] . "' type='radio' value='" . $wcase['case_pk'] . "' /></td><td width='65' align='left'><div class='case_list'><img src='images/case_icons/" . $wcase['patient_icon'] . "' width='44' height='45' /></div></td><td width='350' align='left'>" . $wcase['first_name'] . ' ' . $wcase['last_name'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbspGender: ' . $wcase['gender'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age: ' . $wcase['age'] . '<br />Presenting Complaint: ' . $wcase['presenting_complaint'] . "</td></tr></table>"; 
     } 
    echo "</span></p></div>"; 
} 
+0

developerCK - Большое спасибо за это, отлично работает - см. рабочий код в редакторе OP. – IlludiumPu36

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