从一个表中选择行,其中值存在于另一个表的数组中

时间:2018-04-06 10:05:56

标签: php mysql arrays

我有两张桌子。

  1. Users table 有专栏

    • member_group等于
      • 管理
      • 营销
      • 销售
    • zone等于
      • 西
  2. Meetings table 有专栏

    • for_member_group
    • for_zone列。
  3. for_member_groupfor_zone可能包含逗号分隔的多个值。

    例如

    • for_member_group =管理员,销售
    • for_member_group =管理员,营销,销售

      for_zone列相同。

    现在我想向该特定会议发送电子邮件。

    例如来自会议表第3行,其值为for_member_group ='管理员,营销'和for_zone ='东,西'

    现在邮件应该发送到包含行的管理和营销名称以及仅包含区域名称的东西方名称 Users Table

    但用户查询无法正常工作.... 未选择任何用户且未收到任何电子邮件...

    我也试过echo $userdata['email'];但没有回应......并且没有看到错误......

    我尝试过如下:

    <?php
        $qry = "select * from $meetings where meeting_start > $today order by meeting_start desc limit 1";
        $results = $database->get_results($qry);
        foreach($results as $lecture_data){
            $for_member_group = $lecture_data['for_member_group'];
            $for_zone = $lecture_data['for_zone'];
            $userquery = "select * from $users where member_group IN('$for_member_group') and zone IN('$for_zone') ";
            $userresult = $database->get_results($userquery);
            foreach ($userresult as $userdata){
                echo $userdata['email'];
                ob_start();
       ?>
    
       <!-- EMail HTML and PHP Coding-->
    
    
     <?php
    
      rest php code
         }
     }
     ?>
    

3 个答案:

答案 0 :(得分:0)

我收到同样的错误,请尝试此查询。

$userquery = "select * from $users where member_group IN(".$for_member_group.") and zone IN (".$for_zone.") ";

答案 1 :(得分:0)

我认为你必须使用FIND_IN_SET()

如下所示:

$userquery = "select * from $users where (FIND_IN_SET('Admin',member_group) OR FIND_IN_SET('Sales',member_group) ) and (FIND_IN_SET('North',zone) OR FIND_IN_SET('West',zone))";

答案 2 :(得分:0)

$for_member_group似乎是一个CSV字符串。您必须引用要在IN()语句中使用的所有元素。请注意,您应该先测试$for_member_group$for_zone是否为空,然后再使用它们。

$mem_quote = "'".implode("','", explode(',', $for_member_group))."'";
$zon_quote = "'".implode("','", explode(',', $for_zone))."'";
// $mem_quote will be equals to 'Admin','Marketing'
$userquery = "select * from $users 
              where member_group in($mem_quote) 
                and zone in($zon_quote)";

查询将如下所示:

select * from $users 
 where member_group in('Admin','Marketing') 
   and zone in('East','West')