首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:在多维数组中找到字符串,还是返回空数组键?

PHP:在多维数组中找到字符串,还是返回空数组键?
EN

Stack Overflow用户
提问于 2015-04-12 15:23:14
回答 1查看 45关注 0票数 0

我有一个多维数组$rows,它返回如下所示的结果;我创建了基于array_keys的查询。现在我面临的问题是,如果没有空床,并且我的所有查询都被抛出,$rows可能会返回一些行,也可能不会返回。

我尝试过使用in_array函数,但这似乎不适用于多维数组。

代码语言:javascript
复制
array (size=6)
      0 => 
        array (size=2)
          'room_category' => string 'MALE GENERAL WARD' (length=17)
          'vacant_beds' => string 'MG-5' (length=4)
      1 => 
        array (size=2)
          'room_category' => string 'FEMALE GENERAL WARD' (length=19)
          'vacant_beds' => string 'FG-2,FG-3,FG-4' (length=14)
      2 => 
        array (size=2)
          'room_category' => string 'MOTHER CHILD WARD' (length=17)
          'vacant_beds' => string 'MC-1,MC-3,MC-4' (length=14)
      3 => 
        array (size=2)
          'room_category' => string 'NICU' (length=4)
          'vacant_beds' => string 'NICU-8,NICU-4,NICU-5,NICU-6,NICU-1,NICU-7,NICU-2' (length=48)
      4 => 
        array (size=2)
          'room_category' => string 'CLASSIC' (length=7)
          'vacant_beds' => string 'CL-9,CL-4,CL-5,CL-7,CL-8' (length=24)
      5 => 
        array (size=2)
          'room_category' => string 'DELUXE' (length=6)
          'vacant_beds' => string 'DLX-6,DLX-3,DLX-4,DLX-5' (length=23)

我应该采取什么方法,或确保它返回一行,即使一个特定的病房不是空置的。

我为$rows编写的代码如下:

代码语言:javascript
复制
select `rct`.`room_category` AS `room_category`,
    group_concat(`rn`.`room_name` separator ',') AS `vacant_beds` 
    from ((`room_name` `rn` join `room_category` 
    `rct` 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`) group by `rn`.`room_category`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-12 15:48:40

您对空床查询的连接忽略了空值。我建议您使用子查询生成完整的room_category值列表。

代码语言:javascript
复制
            select distinct room_category
              from room_category

然后,我建议您将联接该子查询保留到查询的其余部分,并使用它的值对其进行分组。最终看起来会是这样的:

代码语言:javascript
复制
select a.room_category, 
       group_concat(b.room_name ORDER BY b.room_name) vacancies
  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.room_category
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29591072

复制
相关文章

相似问题

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