【问题标题】:select row from one table where value exists from array from another table从一个表中选择行,其中值存在于另一个表的数组中
【发布时间】:2018-04-06 10:05:56
【问题描述】:

我有两张桌子。

  1. Users table有栏目

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

    • for_member_group
    • for_zone 列。

for_member_groupfor_zone 可能包含多个值,用逗号分隔。

例如

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

    for_zone 列也一样。

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

例如来自会议表第 3 行,其值类似于 for_member_group = 'Admin,Marketing' 和 for_zone='East,West'

现在应该将邮件发送给管理员和营销名称,其中包含行和仅包含区域名称的东和西,格式为 Users Table

BUT USER QUERY 不起作用.... 没有选择用户,也没有发送电子邮件...

我也尝试了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
     }
 }
 ?>

【问题讨论】:

  • 你的错误是什么?
  • @ErwannBestard 没有发送电子邮件...
  • 使用这样的查询 IN(".$for_member_group.")
  • 您应该尝试回显答案以调试程序,因为您的错误可能在邮件脚本中
  • 没有发送邮件的代码

标签: php mysql arrays


【解决方案1】:

$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')

【讨论】:

  • thnx 并尝试过...但给出语法错误,意外的 '$for_member_group' (T_VARIABLE) in
  • @DrMJ 对不起,我少了一个逗号。请查看更新后的答案。
【解决方案2】:

我遇到了同样的错误,请尝试这个查询。

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

【讨论】:

    【解决方案3】:

    我认为你必须使用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))";
    

    【讨论】:

    • 如果我们有更多的 member_group 值,请使用 OR 条件添加更多条件
    • 这是不可能的,因为会议表可能包含具有不同值的列 for_member_row 的各种行,并且用户 member_group 名称可能在未来几天内增加......所以 IN 对我来说是完美的......但不幸的是,它不工作...
    猜你喜欢
    • 2012-03-04
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多