首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP MYSQL -动态访问数组值

PHP MYSQL -动态访问数组值
EN

Stack Overflow用户
提问于 2017-01-27 23:29:50
回答 2查看 89关注 0票数 2

我正在使用PHP和MYSQL在Yii2中创建一个已占用/空置的房间图表。我可以得到我想要的结果,但我所做的不是正确的方法,因为我所做的一切都是硬编码的。我想要的是让它具有动态性。

我的查询如下:

代码语言:javascript
复制
command = Yii::$app->db->createCommand
        ("select a.room_category, group_concat(b.room_name) vacant_beds
    from (select distinct id, room_category from room_category) a
    left join 
    (select rct.room_category AS room_category,
        rn.room_name 
    from room_category rct  
    left join room_name rn on rn.room_category = rct.id
    left join patient_detail pd on rn.id = pd.bed_type
    and (isnull(pd.discharge_date) or now() between pd.admission_date and pd.discharge_date)
    where isnull(pd.id) 
  order by rct.room_category, rn.room_name) b on a.room_category=b.room_category
group by a.room_category
order by a.id");
$rows= $command->queryAll();

$rows的结果如下所示:

代码语言:javascript
复制
array (size=9)
  0 => 
    array (size=2)
      'room_category' => string 'MALE GENERAL WARD' (length=17)
      'vacant_beds' => string 'MG-8,MG-2,MG-4,MG-6,MG-7' (length=24)
  1 => 
    array (size=2)
      'room_category' => string 'FEMALE GENERAL WARD' (length=19)
      'vacant_beds' => string 'FG-4,FG-1,FG-2,FG-3' (length=19)
  2 => 
    array (size=2)
      'room_category' => string 'MOTHER CHILD WARD' (length=17)
      'vacant_beds' => string 'MC-2,MC-4,MC-5,MC-6' (length=19)
  3 => 
    array (size=2)
      'room_category' => string 'TWIN' (length=4)
      'vacant_beds' => string 'TW-A1,TW-A2,TW-B2,TW-C1,TW-C2' (length=29)
  4 => 
    array (size=2)
      'room_category' => string 'NICU' (length=4)
      'vacant_beds' => string 'NICU-6,NICU-1,NICU-7,NICU-3,NICU-8,NICU-4,NICU-5' (length=48)
  5 => 
    array (size=2)
      'room_category' => string 'CLASSIC' (length=7)
      'vacant_beds' => string 'CL-6,CL-8,CL-4,CL-5' (length=19)
  6 => 
    array (size=2)
      'room_category' => string 'DELUXE' (length=6)
      'vacant_beds' => string 'DLX-5,DLX-6' (length=11)
  7 => 
    array (size=2)
      'room_category' => string 'EXECUTIVE' (length=9)
      'vacant_beds' => null
  8 => 
    array (size=2)
      'room_category' => string 'AC GENERAL WARD' (length=15)
      'vacant_beds' => string 'AG-5,AG-1,AG-2,AG-3,AG-4' (length=24)

然后,对于每个房间,我这样做:

代码语言:javascript
复制
$commandOccupiedmg1 = Yii::$app->db->createCommand
        ("SELECT pd.patient_name as name,i.ipd_patient_id ipd,i.care_of_name relation, 
        i.mobile, i.district_city,pd.admission_date from patient_detail pd, 
        ipd_patient_entry i, room_name rn 
        where pd.ipd_patient_id=i.id and discharged !=1 and rn.id=pd.bed_type and rn.room_name='MG-1'");
$mg1s= $commandOccupiedmg1->queryAll();

mg1s的数据如下:

代码语言:javascript
复制
array (size=1)
  0 => 
    array (size=6)
      'name' => string 'SAROJ MIRDHA' (length=12)
      'ipd' => string '0749/15' (length=7)
      'relation' => string 'GUDUM MIRDHA' (length=12)
      'mobile' => string '7381566425' (length=10)
      'district_city' => string 'SAMBALPUR' (length=9)
      'admission_date' => string '2015-06-16 21:45:00' (length=19)

要访问我正在执行此查询的值:

代码语言:javascript
复制
foreach($mg1s as $mg1){

    $mg1_patient_name=$mg1['name'];
    $mg1_mobile =$mg1['mobile'];
    $mg1_ipd = $mg1['ipd'];
    $mg1_relation = $mg1['relation'];
    $mg1_admission_date=$mg1['admission_date'];
}

然后,为了显示我使用此代码的每个房间的信息。对每个房间都这样做。

代码语言:javascript
复制
<table  class="table table-striped table-bordered discharge-note-border">
    <tr>
<td>MALE</td>

<?php         
    if (array_key_exists('0', $rows) && strpos($rows[0]['vacant_beds'],'MG-1')!==FALSE) {
    echo "<td style='background-color:#FFFFCC;'/>MG-1 </td>";
    }else{
      echo "<td style='background-color:#CCFFFF;'>
        <div class='occupied'>MG-1<div id='occupied-hover'>       
        Patient Name - $mg1_patient_name  <br> IPD No. - $mg1_ipd 
        <br>          
        Guardian - $mg1_relation <br> Mobile - $mg1_mobile <br>
         Admission Date - $mg1_admission_date        
        </div></div> </td>";

    }

问题是大约有50个房间。我正在对所有东西进行硬编码。如果添加或删除了任何房间,我必须更改代码,否则它将崩溃。

我需要一个建议,我可以做它的动态和更好的方式。

EN

回答 2

Stack Overflow用户

发布于 2017-01-28 04:50:31

如果您正在使用Yii2,我建议您将yii\db\ActiveRecordyii\db\Query结合使用。

您可以使用Gii生成从ActiveRecord扩展的模型类。它生成可与Lazy Loading and/or Eager Loading一起使用的关系。

此外,通过使用它们,您可以使用更易于阅读和更动态的代码来构建查询。此外,您可以实际使用模型类中的对象,这些对象具有自己的方法和未存储在数据库中的额外属性。

票数 1
EN

Stack Overflow用户

发布于 2017-01-28 00:43:59

在这样的关系查找中,有几个数据库函数对构建动态输出非常有帮助。

我对Yii不是很熟悉,但通常你会想要使用工作流来执行:

代码语言:javascript
复制
//QUERY ALL ROOMS
$rooms = mysqli_query($rooms_query)
$rooms_count = myqsli_num_rows($rooms);

for($r = 0; $rooms_count < $r; $r++)
{  
    //GET DATA AND STEP TO NEXT RECORD
    $rooms_details = mysqli_fetch_assoc($rooms)
    //STEP THROUGH EACH ROOM AND ASK THE DB FOR PERTINENT INFORMATION
    $vacancies_sql = "SELECT vacant_beds FROM (vacancies) WHERE room_id = $rooms_details['id']";
    $vacancies = mylsqli_query($vancancies_sql);
    $vacancies_count = mysqli_num_rows($vacancies);

    //GO THROUGH EACH VANCANY RECORD, AND ADD IT, AND IT's ROOM TO OUTPUT
    $output[$r] = array('room' => $rooms_details['room_name']);

    for($v=0;$v < $vacancies_count; $v++)
    {
        $vacancies_details = mysqli_fetch_assoc($vacancies);
        $output[$r]['vacancies'] = $vancancies_details['vacant_bed_id'];
    }

return $output;

因此,这将为您提供具有所需细节的多维模型。结构类似于:

数组=> (房间=‘男性’,空缺=数组(0= 'mg1',依此类推...)

因此,要了解这是什么样子,您可以尝试print_r($output)

显然,这不是完整的工作代码。这是一段伪代码,展示了将数据转换成一个有用的MultiDimensional数组的想法和方法,您可以轻松地在视图中使用该数组。

希望这能有所帮助!如果你想要我进一步解释或澄清,我很乐意更新我的答案,只需在评论中让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41897492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档