【问题标题】:PHP looping out records within seperate JQuery accordionsPHP在单独的JQuery手风琴中循环出记录
【发布时间】:2013-11-01 10:24:26
【问题描述】:

我有以下 MySQL 查询:

$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”中的每个记录生成一个折叠式,每个折叠式包含一个“案例”。我所追求的是为每个“候诊室”配备一个手风琴,每个“候诊室”都包含来自表 vcase 和患者的相关病例数据。

目前'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);

看来我需要在&lt;span class='text'&gt;&lt;/p&gt;&lt;/div&gt; 之间的每个手风琴候诊室中循环播放这些案例有什么建议吗?

编辑

感谢 NoBBY,我有以下工作代码(仍然需要清理它重新格式化...):

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

【问题讨论】:

  • 很难弄清楚你想要什么(一些现有的数据和你期望的结果会有所帮助)。但是我怀疑你想要的是对输出进行分组,在这种情况下为 MySQL 查找 GROUP_CONCAT。

标签: php jquery mysql jquery-ui jquery-ui-accordion


【解决方案1】:

不要直接从数据库中输出结果,而是先尝试格式化它。 例如,您可以这样做:

$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(均在文档中链接)
  2. 使用实际连接,查询中的替代连接语法会损害可读性
  3. 格式化您的 sql 和 html 代码。我敢打赌,很多人在看到代码段中的这些水平滚动条时都跳过了你的问题

我希望你会同意:

<?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; ?>

比那要好得多:

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>";
}

你会得到奖励看到未闭合的跨度标签:)

【讨论】:

  • 感谢 NoBBy。我对第一个和第二个代码块以及它们如何组合在一起有点困惑,尤其是因为两者都在循环 $result_waitingrooms。第二个块中的嵌套 foreach 循环和第一个块中创建的数组在哪里?
  • 解决了。非常感谢您的帮助诺比!请参阅 OP 中的编辑(仍要清理布局)
  • 您好,很高兴为您提供帮助。第二个代码示例只是一个格式化示例。我拿走了你的代码并向你展示了一种美化它的方法。与第一个代码无关。
猜你喜欢
  • 1970-01-01
  • 2020-03-08
  • 2011-05-01
  • 2023-03-04
  • 2012-12-23
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
相关资源
最近更新 更多