Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MYSQL-动态访问数组值_Php_Mysql_Yii2 - Fatal编程技术网

PHP MYSQL-动态访问数组值

PHP MYSQL-动态访问数组值,php,mysql,yii2,Php,Mysql,Yii2,我正在使用PHP和MYSQL在Yii2中创建一个占用/空闲房间图表。 我能够得到我想要的结果,但我所做的不是正确的方法,因为我正在硬编码的一切。 我想要的是让它充满活力 我的问题如下: command = Yii::$app->db->createCommand ("select a.room_category, group_concat(b.room_name) vacant_beds from (select distinct id, room_categ

我正在使用PHP和MYSQL在Yii2中创建一个占用/空闲房间图表。 我能够得到我想要的结果,但我所做的不是正确的方法,因为我正在硬编码的一切。 我想要的是让它充满活力

我的问题如下:

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();
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)
$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();
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)
$rows
的结果如下:

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();
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)
$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();
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)
对于每个房间,我都是这样做的:

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();
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)
$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();
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)
MG1的数据如下所示:

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();
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)
$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();
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)
要访问我正在执行此查询的值:

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'];
}
然后显示我使用此代码的每个房间的信息。对每个房间都这样做

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

    }

男性

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

我对Yii不是很熟悉,但通常您希望使用工作流执行:

//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;
//查询所有房间
$rooms=mysqli\u查询($rooms\u查询)
$rooms\u count=myqsli\u num\u行($rooms);
对于($r=0;$rooms\u count<$r;$r++)
{  
//获取数据并步进到下一条记录
$rooms\u details=mysqli\u fetch\u assoc($rooms)
//走遍每个房间,向DB询问相关信息
$outpositions\u sql=“从房间id=$rooms\u details['id']中的(空缺)中选择空置的床”;
$publications=mylsqli\u查询($vancancies\u sql);
$outpositions\u count=mysqli\u num\u行($outpositions);
//仔细检查每一条VANCANY记录,并将其添加,这样就有了输出的空间
$output[$r]=数组('room'=>$rooms\u details['rooms\u name');
对于($v=0;$v<$U count;$v++)
{
$outpositions\u details=mysqli\u fetch\u assoc($outpositions);
$output[$r]['EXTANCIES']=$vancancies_详细信息['EXTANCE_bed_id'];
}
返回$output;
因此,这将为您提供一个包含所需详细信息的多维模型。结构如下:

数组[0]=>(房间='男性',空缺=数组(0='mg1',等等)

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

显然,这不是完整的工作代码。这是psuedo代码,它展示了将数据转换成有用的多维数组的思想和方法,您可以在视图中轻松利用这些多维数组


希望这有帮助!如果您希望我进一步解释或澄清,我很乐意更新我的答案,请在评论中告诉我。

如果您使用的是Yi2,我建议与一起使用

您可以使用生成从
ActiveRecord
扩展而来的模型类。它生成可与一起使用的关系


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

丢失组concat。看起来您正在做大量工作,以避免可能需要第二个sql调用?您有患者、床和房间,房间有床,患者有床。3个实体,2个关系。对不起,4个实体,3个关系,似乎您有一个称为“病房”的分类组是的,你是对的。那么你能解释一下,我该怎么做吗?好吧,你在寻找什么输出?房间普查,你将从病房连接到房间连接到床,然后左连接到病人所在的地方。patientID不是空的,按病房、房间排序。任何病人id为空的床都将是空床,所以如果你只需要e空床,相同的过程,但是patient.patiendID是空的。好的,我会试试,让你知道。不过谢谢你的指导。