Php for循环和mysql查询

时间:2014-04-08 16:09:07

标签: php mysql

我在for循环中使用mysql运行第二次数据库搜索,但我无法显示正确的行数:

原始搜索:

    $topicemailsql = "select se.id as id, se.users as users, se.topic as topic, se.body as body, se.postID as postID, DATE_FORMAT(se.sent, '%d.%m.%Y %H:%i:%s' ) as sent, (SELECT u.email from users u where u.users_id in (se.users)) as emails from sentEmail se LEFT OUTER JOIN topics t on (t.ID = se.theader_) where t.ID = '$topicID'";
$topicemailsqlquery = mysql_query($topicemailsql)or die(mysql_error());

$numrows = mysql_num_rows($topicemailsqlquery);

php for loop:

    for ($i=0; $i < $numrows ; $i++){

    $sqlarray = mysql_fetch_array($topicemailsqlquery);
    $users = $sqlarray['users'];
    $sqlemail = ('select email from users where users_id in ("'.$users.'")');
    //echo $sqlemail;
    $emailsqlquery = mysql_query($sqlemail)or die(mysql_error());
    $amountofusers = mysql_num_rows($emailsqlquery);
    $sqlarrayemail = mysql_fetch_array($emailsqlquery);
    echo $amountofusers;
//echo $sqlarrayemail['email'];

    for ($a=0; $a < $amountofusers ; $a++){
        if($a == 0){
         $email = $sqlarrayemail['email'];
    }
        else if($a < $amountofusers){
        $email = $sqlarrayemail['email'].','.$sqlarrayemail['email'];
        }
        }
}

因此,基于此,$ amountofusers应该返回超过1行,但现在它总是只返回一行。 当我回显$ sqlemail时,它应返回2行,因为它看起来像这样: 选择来自user_id in(“4,82”) - &gt;的用户的电子邮件这应该返回2行,计数为2,但它只返回一行。

哪里出错?

BR, 托比

1 个答案:

答案 0 :(得分:1)

我认为,在一个字段中存储多个值是一个非常糟糕的主意。此外,如果我可以避免,我不会在循环中启动查询。更好地一次性获取数据,让PHP完成剩下的工作。如果您尝试查询,即使用PHPAdmin,则使用

SELECT email 
FROM users 
WHERE users_id IN (4, 82)

IN运算符需要以逗号分隔的参数列表。你给出一个单一的值

"4,82"

这是一个巨大的差异。 MySQL也会接受("4","82")(其他DBMS不具备容忍度)并为您处理不需要的转换。