我有一个函数,它从满足特定WHERE条件的表中获取一组特定的用户。
我要给他们每个人发个口信。
所以,我使用了另一个函数来发送消息。并在其中调用该函数,并跟踪while循环。
while($user= mysqli_fetch_assoc($users_set)){
send_message($user['email']);
}所以问题是,这个函数只被调用了一次。(只使用循环的最后一个值)
如何解决这个问题,并使函数调用与每个值的循环.
这是完整的密码。
$query = "SELECT * ";
$query .= "FROM user ";
$query .= "WHERE confirmed = 0";
$user_set = mysqli_query($db_conx, $query);
confirm_query($user_set);
while($user = mysqli_fetch_assoc($user_set)){
send_message($user['email']);
}这是发送消息的函数..。
function send_message($email){
global $db_conx;
$invitee_user = get_user_by_email($email);
$query5 = "INSERT INTO notification(";
$query5 .= "description, user_id";
$query5 .= ") VALUES(";
$query5 .= "'You have been confirmed'";
$query5 .= ", {$invitee_user['id']}";
$query5 .= ")";
$result5 = mysqli_query($db_conx, $query5);
if($result5){
//$_SESSION["message"] = "Notification sent". \mysqli_error($db_conx);
return "OK";
}else{
//$_SESSION["message"] = "Failed to send notification". mysqli_error($db_conx);
}}
以下是confirm_query()的代码
function confirm_query($result_set){
if(!$result_set){
die("Fatal Error Occured : Database Query Failed <a href=\"error-report.php\">Report this error</a>");
}}
发布于 2015-05-14 20:05:48
我只想把它归结为一个查询,然后去掉所有循环的东西。
INSERT INTO notification (description, user_id)
SELECT 'You have been confirmed', user_id
FROM user
WHERE confirmed = 0你目前的逻辑很复杂。
您查询user表以获取用户电子邮件字段,然后将该电子邮件作为参数传递给您的函数,然后转身,然后(我猜)根据电子邮件查找用户ID (当您已经从初始查询中获得此信息时),然后进行插入。
这意味着,对于从第一个查询返回的每条记录,都需要执行两个查询才能插入通知表。因此,如果您有100个结果,那么总共至少要执行201次查询来完成插入操作。
使用我的方法,您可以进行1次查询,而不管有多少行受到影响。
您应该从中得到的一个好处是,每当您看到自己试图进行某种嵌套查询时,就应该将其识别为反模式(通常不想使用的编码模式)。如果您重新思考如何编写查询,通常可以采用更好的方法。
https://stackoverflow.com/questions/30245972
复制相似问题