将2个mysql查询合并为一个

时间:2015-07-22 01:43:30

标签: php mysql

我有一个博客。每当用户对帖子发表评论时,他们都会选择“通过电子邮件通知我新评论”。但是我将邮件发送给已经选中要通知的复选框的用户有一点问题。

每当用户发表评论的帖子时都会收到通知,并选中“通知我...”复选框以获取新评论。

insert_comments表单正在将数据发送到add_comment.php,我已将代码发送到add_comment.php中发送电子邮件

mysql插入评论查询后。我有这两个问题:

class ButterknifeActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.logo) ImageView logo;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    ButterKnife.bind(this);
  }
}

但我不知道如何将它们组合成一个查询。

add_comment.php如下所示:

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

我的数据库中有这3个表:

类: id,姓名,日期

帖子: id,cat_id,title,contents,image,date_posted

注释: id,post_id,name,email,comment,notify,date

1 个答案:

答案 0 :(得分:2)

真正的问题是,为什么你需要两个查询?如果寻求订阅电子邮件通知的用户的请求存在于插入评论的同一请求中,那么您已经拥有评论ID,并且根本不需要查询数据库。你做$cal = min_price = (price * ((100 - :min) / 100)) ; $stmt = $pdo->prepare("UPDATE uk_products SET min_price = :cal_price) /* ... */ WHERE price BETWEEN :minrange AND :maxrange"); $stmt->execute([':cal_price' => $cal /* ... */ ]); 时已经做过了。有关详细信息,请参阅mysqli::$insert_id

此外,依赖INSERT之类的东西是一个非常糟糕的主意,因为无法保证它会为您提供刚插入行的id。当时可能已经发布了另一条评论,或者最大的ID不一定是最后一条(例如,两个请求同时进入,而您正在寻找的请求恰好是倒数第二个)。

是的,如果您愿意,可以使用MySQLi::multi_query运行多个查询,但是您真的不想这样做,因为它并没有为您提供任何好处。您只想从上次查询中获取MAX(id)并使用该查询在单独的查询中查找订阅者。