【问题标题】:fetching datas from two tables satisfying the where condition从满足 where 条件的两个表中获取数据
【发布时间】:2013-09-10 08:14:59
【问题描述】:

我有一个疑问。我可以在一个查询中执行以下两个查询吗?

SELECT id FROM table1 WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) AND status<>200 ORDER BY time_stamp ASC LIMIT 2 "

SELECT email FROM table2 WHERE wid='".$xy."'" 其中$xy 是从第一个选择查询中获取的 id。

我的php代码:

$dat =mysql_query("SELECT * FROM table1 WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) AND status<>200 ORDER BY  time_stamp ASC LIMIT 2 ");
while($dt=  mysql_fetch_assoc($dat)){
$add=  mysql_query("SELECT email FROM table2 WHERE wid='".$dt['id']."'");
$result=  mysql_fetch_assoc($add);
$to=$result['email'];
$subject="site down";
$message="your site is down";
$header="From:admin@gmail.com";
$retval=mail($to,$subject,$message,$header);}

我的表格如下所示:

表1:

id        url      status      time_stamp

9       dgfgg     404        2012:09:05 13:04:56

10       gfh      404        0000:00:00 00:00:00

11        fg      200        0000:00:00 00:00:00

表2:

wid    email

9       ufff@hguh

10      yfyff@hfg

11      yfyf@hg.com

谁能建议一个查询来完成这项工作,而不是像我在我的 php 代码中那样写两个??

【问题讨论】:

  • 你能把第一次选择的结果贴出来吗?
  • @Mihai:它是一个 int id 9 和 10。表 2 中有相同的 id,其中还包含相应的邮件 id。我需要邮寄到该邮件 ID。
  • SELECT email FROM table2 WHERE wid IN(9,10) 可以吗?
  • @Mihai:是的,这行得通..但是当我结合两个查询时它没有用..
  • @user007 与您的错误无关,但 $subject,$message,$header 字符串分配不应该在循环之外吗?无需一次又一次地做。

标签: mysql select merge


【解决方案1】:
SELECT email FROM table2 WHERE wid=(SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC LIMIT 2) 

糟糕,如果它返回多个 id 使用 IN 而不是 =

$dat =mysql_query("SELECT email FROM table2 WHERE wid IN(SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC)LIMIT 2  ");
while($result = mysql_fetch_assoc($dat)){
$to=$result['email'];
$subject="site down";
$message="your site is down";
$header="From:admin@gmail.com";
$retval=mail($to,$subject,$message,$header);}

是的,从 PHP 5.5 开始不推荐使用 mysql 函数,请使用 mysqli 或 PDO。

编辑好,尝试将 LIMIT 2 放在第一个括号之外

http://sqlfiddle.com/#!2/1152d/1.

【讨论】:

  • this works well when only one id is taken.. but when two id is selected it both didn't works..i mean IN and = ..
  • 我在我的帖子中包含了这个
  • 您发布的已编辑代码适用于 status!=200 的一个条目。但是当状态有多个条目时!= 200 它不起作用。 [我在我的代码中添加了一行打印 $to 以检查它是否工作]
  • 发布表架构和一些数据。即使有超过一列 200 它也应该工作。
  • 感谢它现在可以在将限制放在括号之外
【解决方案2】:

试试这个

SELECT email FROM table2 WHERE wid IN (SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC LIMIT 2) 

【讨论】:

  • @user007 你能用示例数据展示你的数据库模式吗?我在此查询中没有发现任何问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2014-10-10
  • 1970-01-01
  • 2018-10-06
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多