Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组合多个sql查询的php_Php - Fatal编程技术网

组合多个sql查询的php

组合多个sql查询的php,php,Php,我的页面中有一部分每10秒刷新一次,以检查用户是否有任何邮件或警报 我一个接一个地问了两个问题 $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 = $r

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

我一个接一个地问了两个问题

$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];
是否可以通过将该查询合并到一个查询中来将行程保存到数据库?有必要吗?

为什么只使用工会

SELECT date
FROM alerts where...
UNION
SELECT date
FROM mobmail where...
如果你想要复制品。。。利用
联合所有

为什么只使用联合

SELECT date
FROM alerts where...
UNION
SELECT date
FROM mobmail where...

如果你想要复制品。。。使用
UNION ALL

您可以使用
UNION
来执行此操作。。基本上,将第二个查询放在第一个查询之后,中间有
UNION


除了
to_id
,你似乎不能在这里加入任何东西,但你并没有从中得到任何好处。这几乎是一个交叉连接,这将是不必要的低效。

您可以使用
联合来完成。。基本上,将第二个查询放在第一个查询之后,中间有
UNION


除了
to_id
,你似乎不能在这里加入任何东西,但你并没有从中得到任何好处。这几乎是一个交叉连接,这将是不必要的低效。

为什么不使用联合,以及
MAX
aggregate命令

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端处理:

$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'];
   }
}

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

为什么不使用union和
MAX
aggregate命令

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端处理:

$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'];
   }
}

。。。这些SQL语句实际上可能会失败,因为您没有提供
ORDER BY
子句,默认情况下,您可能会以升序(最新日期在末尾)返回它们但是没有保证。这些SQL语句实际上可能会失败,因为您没有提供
ORDER BY
子句,默认情况下,您可能会以升序(最新日期在末尾)返回它们,但没有保证。