【问题标题】:Mysql loop return incorrect dataMysql循环返回不正确的数据
【发布时间】:2017-11-29 09:09:24
【问题描述】:

大家下午好,

我遇到了一个问题,无法弄清楚我在 myslq/php while/foreach 循环中做错了什么。

循环似乎在重复结果。

////////////////////////Check which site have this app///////////////////
$query_t = "SELECT * FROM site WHERE app_id='2'";
$result_t = mysql_query($query_t) or die(mysql_error());

$rows = array();     
while($r_t = mysql_fetch_array($result_t))
    $rows[] = $r_t;
foreach($rows as $r_t){ 

$this_areport_site_id = $r_t['site_id'];

  //////////////Search for user emails that have access to this app ////////
 $query_t4 = "SELECT mail FROM $user_tbl WHERE arep_kitchen='1' AND site_id='$this_areport_site_id' ORDER BY id ASC";
 $result_t4 = mysql_query($query_t4);

 while ($r_t4 = mysql_fetch_array($result_t4)) {
    $areport_kitchen_email .= $r_t4[mail].',';// append comma after each value you append to the string

 }

echo 'Here: '.$this_areport_site_id.' - '.$areport_kitchen_email.'<br />';

     }

现在它确实返回了以下内容:

Here: AHROW - person1@email.com,
Here: AHROW - person1@email.com,person2@email.com,
Here: AHALEX - person1@email.com,person2@email.com,person3@email.com,

我期待

Here: AHROW - person1@email.com,person2@email.com,
Here: AHLANG - No Records here
Here: AHALEX - person3@email.com,

当我整个上午都坐在那儿时,我会很感激建议我做错了什么。

【问题讨论】:

    标签: foreach while-loop


    【解决方案1】:

    我已经解决了这个问题,方法是在另一个循环中执行两个循环并从逗号分隔的字符串中退出,这在第一篇文章中似乎是一个问题。

    Bozzy,谢谢你的努力。

    $query_t7 = "SELECT * FROM site WHERE app_id='2'";
    $result_t7 = mysql_query($query_t7) or die(mysql_error());
    while($r_t7 = mysql_fetch_array($result_t7)) {
    
    $this_areport_site_id = $r_t7['site_id'];
    
    $query_t8 = "SELECT * FROM admins WHERE arep_kitchen='1' AND site_id='$this_areport_site_id' ORDER BY id ASC";
    $result_t8 = mysql_query($query_t8) or die(mysql_error());
    while($r_t8 = mysql_fetch_array($result_t8)) {
    
    $areport_kitchen_email = $r_t8['mail'];
    
    }
    }
    

    【讨论】:

    • 也许你会在$areport_kitchen_email = $r_t8['mail']; 之后添加一个echo 来输出你的数据,对吧?但是,我认为这不是一个完整的解决方案,至少如果您还需要输出没有电子邮件的站点(在您的示例中为 AHLANG),这将不会在第二个 while 循环中计算,因为没有记录满足查询条件.
    【解决方案2】:

    您应该在向其附加电子邮件之前清空字符串$areport_kitchen_email

    $areport_kitchen_email = ''; // empty emails container string
    
    while ($r_t4 = mysql_fetch_array($result_t4)) {
       $areport_kitchen_email .= $r_t4[mail].',';// append comma after each value you append to the string
    }
    

    这样可以避免重复。

    【讨论】:

    • 您好 Bozzy,首先感谢您的回复。我之前看过这个,你建议的代码我仍然收到:Here: AHROW - person1@email.com, Here: AHROW - person1@email.com,person2@email.com, Here: AHALEX - person3@email.com, 我不确定为什么显示第一行? AHROW 有 2 条记录,AHALEX 有 1 条记录,在 AHLANG app_id 中确实存在但此站点下没有用户电子邮件。
    • 奇怪。所以我们现在有正确的 AHALEX,但仍然有两个带有不同电子邮件组合的 AHROW 实例......我会尝试注释掉电子邮件搜索部分并回显 $this_areport_site_id 的内容,以查看问题出在哪里。如果你试试这个,请告诉我。
    • 因此,当我注释掉搜索电子邮件查询并回显 $this_areport_site_id 时,它确实返回 AHROW AHLANG AHALEX,这是正确的,因为所有这 3 条记录都存在 app_id=2。
    • 嗨 Buzzy,问题出在 $areport_kitchen_email .= $r_t4[mail].',';试图弄清楚是什么。
    • 你会尝试注释掉最新的while循环吗?只保留$areport_kitchen_email = '';echo 语句,看看输出是什么。我无法想象为什么$this_areport_site_id 的内容会通过只读取其内容的代码来改变......
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多