PHP MYSQL-动态访问数组值
我正在使用PHP和MYSQL在Yii2中创建一个占用/空闲房间图表。 我能够得到我想要的结果,但我所做的不是正确的方法,因为我正在硬编码的一切。 我想要的是让它充满活力 我的问题如下: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
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是空的。好的,我会试试,让你知道。不过谢谢你的指导。