2015-07-22 7 views
-2

У меня есть блог. Каждый раз, когда пользователь комментирует сообщение, у них есть опция «Уведомить меня о новых комментариях по электронной почте». Но у меня есть небольшая проблема с отправкой писем пользователям, которые установили флажок для уведомления.Объединить 2 mysql-запросов в один

Пользователи должны получать уведомление каждый раз, когда сообщение отправлено, и установите флажок «Уведомить меня ...» получить новые комментарии.

insert_comments форма отправки данных в add_comment.php и я поставил код, чтобы отправить по электронной почте в add_comment.php

После комментария запроса MySQL вставки. У меня есть эти два вопроса:

SELECT MAX(id) AS last_id FROM `comments` WHERE post_id = $post_id 
SELECT id AS user_who_wants_to_get_notified, email FROM `comments` WHERE notify = 'yes' AND post_id = $post_id 

Но я не знаю, как их объединить в один запрос.

add_comment.php выглядит следующим образом:

<?php 

include_once "blog_functions/config.php"; 

include_once "blog_functions/func/blog.php"; 

$name = $_POST['name']; 
$comment = $_POST['comment']; 
$email = $_POST['email']; 
$post_id = $_POST['post_id']; 

if(isset($_POST['notify_me'])){ 
    $notify_me = $_POST['notify_me']; 
} else { 
    $notify_me = "No"; 
} 

$time = time(); 
$actual_time = date('d-m-Y H:i:s', $time); 

if(!empty($name && $comment && $post_id)){ 

    if(isset($_POST['email']) && filter_var($email, FILTER_VALIDATE_EMAIL)){ 
     mysql_query("INSERT INTO comments(post_id, name, email, comment, notify, date) VALUES('$post_id', '$name', '$email', '$comment', '$notify_me', '$actual_time')"); 

     $query = mysql_query("(SELECT MAX(id) AS last_id FROM `comments` WHERE post_id = $post_id) UNION (SELECT id AS user_who_wants_to_get_notified, email FROM `comments` WHERE notify = 'yes' AND post_id = $post_id)"); 
     $row = mysql_fetch_assoc($query); 

     if(row['last_id'] > row['user_who_wants_to_get_notified']){ 

      mail($row['email'], "New comments on a post you have commented", "There has recently been commented on a post which you want to receive notifications on. \n\n The News Blog", "From: [email protected]"); 
     } 

     header('location: blog.php?id=' . $post_id); 

    } else { 
     echo "There was a problem sending the email, please try again later"; 
    } 

} else { 

    header('location: blog.php'); 
} 

У меня есть эти 3 таблицы в моей базе данных:

категории: идентификатор, имя, дата

сообщений: И.Д., cat_id , title, contents, image, date_posted

комментарии: id, post_id, name, email, commen t, notify, date

+0

mysqli поддерживает несколько запросов http://php.net/manual/en/mysqli.multi-query.php –

+0

несколько вещей. 1) комментарии, вероятно, не должны содержать в себе электронную почту (она должна поступать из таблицы пользователей в соединении. 2) max() может быть невелик. некоторый тип таблицы регистрации или еще много чего. поэтому в случае, если там есть 3 или 4, которые нуждаются в обработке, вы не пропускаете их и не уходите после max() – Drew

+0

. Как связаны два запроса? Он не смотрит, что вы используете результат одного в другой. –

ответ

2

Реальный вопрос: зачем вам два запроса? Если запрос, запрашивающий пользователей, подписавшихся на уведомление по электронной почте, живет в том же запросе, который вставляет комментарий, тогда у вас уже есть идентификатор комментария и вообще не нужно запрашивать базу данных. Вы уже сделали, когда вы сделали INSERT. См. mysqli::$insert_id.

Кроме того, полагаясь на что-то вроде MAX(id), это очень плохая идея, так как нет гарантии, что она предоставит вам тот самый идентификатор, для которого вы только что вставили строку. Еще один комментарий мог бы быть опубликован к тому времени, или самый большой идентификатор не обязательно является самым последним (например, два запроса пришли одновременно, и тот, который вы ищете, является предпоследним).

И да, вы можете запускать несколько запросов с MySQLi::multi_query, если хотите, но здесь вы действительно не хотите, так как это не принесет вам никакой пользы. Вы просто хотите получить insert_id из своего последнего запроса и использовать его для поиска подписчиков в отдельном запросе.

+0

В моем описании выше был добавлен код add_comment.php. Если вы посмотрите на код, вы поймете, почему мне нужны эти запросы. – user3740970

+0

Нет, извините. Я действительно этого не делаю. Все, что я вижу, это код, который точно показывает, почему вам не нужны эти запросы и поддерживает, почему мой ответ намного эффективнее, эффективнее и эклиптичен :) – Sherif

Смежные вопросы