【问题标题】:PHP: Find string in Multi-dimensional array or return empty array keys?PHP:在多维数组中查找字符串或返回空数组键?
【发布时间】:2015-04-12 15:23:14
【问题描述】:

我有一个多维数组$rows,它返回如下结果;我创建了基于 array_keys 的查询。现在我面临的问题是,如果没有空床,$rows 可能会或可能不会返回某些行,而我的所有查询都需要折腾。

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

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 代码是这样的:

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`

【问题讨论】:

  • 嗨 Marc - 问题标题可能重复,但我要求提供其他解决方案,例如是否可以返回空值的数组键。

标签: php mysql arrays


【解决方案1】:

您对空床查询的 JOIN 遗漏了空值。我建议您使用子查询来生成room_category 值的完整列表。

            select distinct room_category
              from room_category

然后我建议您将该子查询 LEFT JOIN 加入到您的其余查询中,并使用其值进行分组。最终会看起来像这样:

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

【讨论】:

  • 嗨 Ollie Jones 我尝试了你的建议,但它只返回一个 room_category 组和该组中的床位。
  • 我希望我可以为你调试查询,但只有你有你的数据。
  • 您好 Olli Jones - 如果您愿意为我做这件事,我愿意提供对我系统的访问权限。
  • 好的。我可以为你做到这一点。请参阅我的个人资料以获取联系信息。
  • 我已将访问 ID 和密码发送到您的 Team Viewer 电子邮件
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2017-11-23
  • 1970-01-01
  • 2017-11-16
  • 2014-12-21
相关资源
最近更新 更多