PHP

2013-10-23 3 views
0

나는 다음과 같은 MySQL의 쿼리를 가지고 :PHP

$query_waitingrooms = "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')"; 
$result_waitingrooms = mysql_query($query_waitingrooms, $connection) or die(mysql_error()); 

결과가 인쇄됩니다 :

예상대로
while ($row_waitingrooms = mysql_fetch_assoc($result_waitingrooms)){ 
    echo "<h6>" . $row_waitingrooms['waitingroom'] . "</h6><div><p><span class='text'><table width='100%'><tr><td><input name='case' id='case_" . $row_waitingrooms['case_pk'] . "' type='radio' value='" . $row_waitingrooms['case_pk'] . "' /></td><td width='65' align='left'><div class='case_list'><img src='images/case_icons/" . $row_waitingrooms['patient_icon'] . "' width='44' height='45' /></div></td><td width='350' align='left'>" . $row_waitingrooms['first_name'] . ' ' . $row_waitingrooms['last_name'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbspGender: ' . $row_waitingrooms['gender'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age: ' . $row_waitingrooms['age'] . '<br />Presenting Complaint: ' . $row_waitingrooms['presenting_complaint'] . "</td></tr></table></p></div>"; 
} 

,이 기록의 각 아코디언 결과 아코디언 당 하나의 '사례'가 포함 된 'waitingroom_case_lookup'테이블 내가해야할 일은 각각의 '대기실'마다 아코디언을 가지고 각각 테이블과 케이스에서 관련 사례 데이터를 포함하는 것입니다. 순간 테이블 'waitingroom_case_lookup'에서

은 다음과 같습니다

CREATE TABLE waitingroom_case_lookup (
    waitingroom_case_lookup_pk int(9) NOT NULL AUTO_INCREMENT, 
    waitingroom_fk int(3) NOT NULL, 
    case_fk int(3) NOT NULL, 
    PRIMARY KEY (waitingroom_case_lookup_pk) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table 'waitingroom_case_lookup' 
-- 

INSERT INTO waitingroom_case_lookup (waitingroom_case_lookup_pk, waitingroom_fk, case_fk) VALUES 
(1, 1, 1), 
(2, 1, 2), 
(3, 2, 3); 

그것은 내가이 작업을 수행 할 수있는 방법을 <span class='text'></p></div> 어떤 제안 사이의 아코디언 waitingrooms의 각각의 경우에서 루프 필요가 나타납니다? 귀족에

편집

덕분에 내가 작업 코드 다음 (아직 ... 다시 포맷 그것을 정리해야) 한 :

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

    $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'] 
    ); 

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>"; 
} 
?> 
+0

원하는 것을 해결하는 것은 매우 어렵습니다 (일부 기존 데이터 및 예상했던 것 도움이 될 것이다). 그러나 내가 원하는 것은 출력을 그룹으로 묶어서 MySQL 용 GROUP_CONCAT를 검색하는 것입니다. – Kickstart

답변

1

대신 직접 데이터베이스에서 결과를 ouputting의 먼저 서식을 지정하십시오. 예를 들어, 당신은 그런 식으로 뭔가를 할 수 :

$waitingRooms = array(); 
while ($row_waitingrooms = mysql_fetch_assoc($result_waitingrooms)){ 
    $waitingRoomPK = $row_waitingrooms['waitingroom_pk']; 

    if (!isset($waitingRooms[$waitingRoomPK])) { 
     $waitingRooms[$waitingRoomPK] = array(
      'waitingroom_pk' => $waitingRoomPK, 
      'waitingroom' => $row_waitingrooms['waitingroom'], 
      'cases' => array(), 
      //.....all the data for a waitingroom 
     ); 
    } 

    $waitingRooms[$waitingRoomPK]['cases'][] = array(
     'case_pk' => $row_waitingrooms['case_pk'], 
     'patient_icon' => $row_waitingrooms['patient_icon'], 
     'first_name' => $row_waitingrooms['first_name'], 
     //.......all the data for a patient 
    ); 
} 

이제 $ waitingRooms 각 대기실에 대한 데이터를 배열하고, 여기에 2 간단한 중첩 된 foreach 문에서 방 각 환자에 대한 데이터가있는 '경우'부분 배열입니다 문 출력 아코디언

에 대해 원하는 HTML을 여기에 비록 코드를 개선하는 몇 가지 방법입니다됩니다

  1. 는 mysql_로 * 기능을 사용하지 마십시오을, 그들은 더 이상 사용되지 않습니다. 문서의 거대한 붉은 경고는 외모 만의 것이 아닙니다. 사용자 mysqli 또는 PDO (모두 docs에 링크 됨)
  2. 실제 조인을 사용하면 쿼리의 구문 조인 구문이 가독성을 떨어 뜨립니다.
  3. sql과 html 코드를 형식화하십시오.

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

    <?php while($row_waitingrooms = mysql_fetch_assoc($result_waitingrooms)): ?> 
    <h6><?= $row_waitingrooms['waitingroom']; ?></h6> 
    <div> 
        <p> 
         <span class='text'> 
          <table width='100%'> 
           <tr> 
            <td> 
             <input name='case' id='case_<?= $row_waitingrooms['case_pk']; ?>' type='radio' value='<?= $row_waitingrooms['case_pk']; ?>' /> 
            </td> 
            <td width='65' align='left'> 
             <div class='case_list'> 
              <img src='images/case_icons/<?= $row_waitingrooms['patient_icon']; ?>' width='44' height='45' /> 
             </div> 
            </td> 
            <td width='350' align='left'> 
             <?= $row_waitingrooms['first_name'] . ' ' . $row_waitingrooms['last_name']; ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
             Gender: <?= $row_waitingrooms['gender']; ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
             Age: <?= $row_waitingrooms['age']; ?> 
             <br /> 
             Presenting Complaint: <?= $row_waitingrooms['presenting_complaint']; ?> 
            </td> 
           </tr> 
          </table> 
        </p> 
    </div> 
    <?php endwhile; ?> 
    

    보다 더 나은 방법입니다 : 나는 그들이

난 당신이 그 동의를 희망 코드 세그먼트에서 이러한 수평 일광 스크롤바를보고 많은 사람들이 질문을 생략 내기

그리고 보너스를받지 않은 스팬 태그를 볼 수 있습니다.

+0

이 주셔서 감사합니다. 나는 코드의 첫 번째와 두 번째 블록에 대해 약간 혼란 스럽다. 둘 모두가 $ result_waitingrooms을 반복하면서 esp와 함께 어떻게 어울리는 지 혼란 스럽다. 또한 두 번째 블록의 중첩 된 foreach 루프와 첫 번째 블록에서 생성 된 배열은 어디에 있습니까? – IlludiumPu36

+0

해결했습니다.도와 줘서 고마워, 고비! OP 편집 (여전히 레이아웃 정리를 참조하십시오.) – IlludiumPu36

+0

안녕하세요. 기꺼이 도와 드리겠습니다. 두 번째 코드 예제는 형식화 된 예제입니다. 나는 당신의 코드를 가져다가 당신에게 그것을 증명하는 방법을 보여주었습니다. 첫 번째 코드와 관련이 없습니다. – NoBBy