首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php组合多个sql查询

php组合多个sql查询
EN

Stack Overflow用户
提问于 2012-01-05 04:06:07
回答 3查看 176关注 0票数 0

我的页面有一个部分,每10秒刷新一次,以检查用户是否有任何邮件或警报。

我有两个紧随其后的查询。

代码语言:javascript
复制
$sql_result7 = mysql_query("SELECT date FROM alerts WHERE to_id='$id' AND date > '$lastcheck'", $db);
$alerts = mysql_num_rows($sql_result7);
$rs7 = mysql_fetch_array($sql_result7); 
$last_alert = $rs7[date];

$sql_result7 = mysql_query("SELECT date FROM mobmail WHERE to_id='$id' AND read = '0'", $db);
$mails = mysql_num_rows($sql_result7);
$rs7 = mysql_fetch_array($sql_result7);
$last_mail_alert = $rs7[date];

是否可以通过将其组合到一个查询中来将行程保存到数据库中?有必要这样做吗?

EN

回答 3

Stack Overflow用户

发布于 2012-01-05 04:08:27

为什么只使用联合?

代码语言:javascript
复制
SELECT date
FROM alerts where...
UNION
SELECT date
FROM mobmail where...

如果你真的想要复制品...利用UNION ALL

票数 1
EN

Stack Overflow用户

发布于 2012-01-05 04:09:19

您可以使用UNION来完成此操作。基本上,将第二个查询放在第一个查询之后,并在其间插入UNION

看起来你不能在这里的任何东西上使用JOIN,除了to_id,但是你并不能从中得到任何好处。这几乎是一个交叉连接,这将是不必要的低效。

票数 1
EN

Stack Overflow用户

发布于 2012-01-05 04:15:16

为什么不直接使用联合和MAX聚合命令...

代码语言:javascript
复制
SELECT max(date) lastdate,'alert' dtype FROM alerts WHERE .. GROUP BY to_id
UNION
SELECT max(date) lastdate,'mail' dtype FROM mobmail WHERE ... GROUP BY to_id

您现在只需要一个SQL查询,并且减少了PHP端处理:

代码语言:javascript
复制
$sql_result7=mysql_query(/* as above with your params*/);
$res=mysql_fetch_array($sql_result7);
$last_alert=$last_mail=null;
foreach ($res as $row) {
   if ($row['dtype']=="alert") {
      $last_alert=$row['lastdate'];
   } elseif ($row['dtype']=="mail") {
      $last_mail=$row['lastdate'];
   }
}

..。或者类似的东西(我不能轻易测试;)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8733265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档