我在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, 托比
答案 0 :(得分:1)
我认为,在一个字段中存储多个值是一个非常糟糕的主意。此外,如果我可以避免,我不会在循环中启动查询。更好地一次性获取数据,让PHP完成剩下的工作。如果您尝试查询,即使用PHPAdmin,则使用
SELECT email
FROM users
WHERE users_id IN (4, 82)
IN
运算符需要以逗号分隔的参数列表。你给出一个单一的值
"4,82"
这是一个巨大的差异。 MySQL也会接受("4","82")
(其他DBMS不具备容忍度)并为您处理不需要的转换。