Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 根据第一个表中的列值,使用条件连接多个表_Php_Mysql_Sql_Join_Codeigniter 3 - Fatal编程技术网

Php 根据第一个表中的列值,使用条件连接多个表

Php 根据第一个表中的列值,使用条件连接多个表,php,mysql,sql,join,codeigniter-3,Php,Mysql,Sql,Join,Codeigniter 3,嗨,我有八个表,我必须从这些表中获取数据。表结构如下所示: event_info id | event_id | event_types | animal_type human_victim_info id | event_id | victim_full_name | address livestock_destruction_info id | event_id | owner_name | owner_address crop_destruction_info id | event_

嗨,我有八个表,我必须从这些表中获取数据。表结构如下所示:

event_info
id | event_id | event_types | animal_type

human_victim_info
id | event_id | victim_full_name | address

livestock_destruction_info
id | event_id | owner_name | owner_address

crop_destruction_info
id | event_id | crop_land_type

proprty_destruction_info
id | event_id | property_type | cost

other_destruction_info
id | event_id | description

additional_info
id | event_id | images | feedback

wild_animal_info 
id | event_id | number | location_from | location_to
我使用join作为:

SELECT e.*
     , wa.*
     , hv.*
     , lv.*
     , c.*
     , p.*
     , o.*
     , a.*
     , e.id as eId
     , e.event_id as eventId 
  FROM event_info e
  LEFT 
  JOIN wild_animal_info wa 
    ON wa.event_id = e.event_id 
  LEFT 
  JOIN human_victim_info hv 
    ON hv.event_id = e.event_id
   AND e.event_types LIKE '%1%'
  LEFT 
  JOIN livestock_destruction_info lv 
    ON lv.event_id = e.event_id 
   AND e.event_types LIKE '%2%'
  LEFT 
  JOIN crop_destruction_info c 
    ON c.event_id = e.event_id 
   AND e.event_types LIKE '%3%'
  LEFT 
  JOIN proprty_destruction_info p 
    ON p.event_id = e.event_id 
   AND e.event_types LIKE '%4%' 
  LEFT 
  JOIN other_destruction_info o 
    ON o.event_id = e.event_id 
   AND e.event_types LIKE '%5%'
  LEFT 
  JOIN additional_info a 
    ON a.event_id = e.event_id 
 WHERE e.event_id LIKE '%0026-%'; 

其中,仅当事件信息表中的事件类型包含1时,我才想加入人类受害者信息表,类似地,仅当事件信息表中的事件类型包含2时,我才想加入牲畜销毁信息表,类似地,仅当事件信息表中的事件类型包含3时,我才想加入作物销毁信息表,依此类推,直至其他销毁信息。但我必须始终加入野生动物信息和附加信息表。我在每张桌子上都有事件id。我怎样才能做到这一点?

问题源于糟糕的设计。如果您正在查询一个表,例如“%3%”等,那么在某个地方出现了很大的问题。哦..我如何修改表设计以轻松获得所需的输出?通过使用一个单独的事件类型表,以规范化的方式存储事件和类型。IMHO这最好留给一些PHP代码,不需要连接所有这些表,只需获取事件,然后按照事件类型的指示获取相应的子表。@NigelRen如果需要从所有8个选项卡中获取O(n^8)的数据,则该子表的伸缩性将更小