Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
Php Mysql双查询请求_Php_Mysql - Fatal编程技术网

Php Mysql双查询请求

Php Mysql双查询请求,php,mysql,Php,Mysql,我有一张桌子: table_1 id time 1 2012-03-05 12:50:00 2 2012-03-05 12:51:00 3 2012-03-05 12:52:00 4 2012-03-05 12:53:00 table_2 userid level 100 1 256 2 112 3 400 2 15 1 第一项请求: $sql = 'SELECT `id`, `time` FROM tabl

我有一张桌子:

table_1
id   time
1    2012-03-05 12:50:00
2    2012-03-05 12:51:00
3    2012-03-05 12:52:00
4    2012-03-05 12:53:00

table_2
userid   level
100      1
256      2
112      3
400      2
15       1
第一项请求:

$sql = 'SELECT `id`, `time` FROM table_1 WHERE `time` > NOW() ORDER BY `id` DESC LIMIT 1';
第二项请求:

$sql = 'SELECT COUNT(*) FROM table_2 WHERE `userid` = 100 LIMIT 1';
如何将这两个请求合并为一个请求

例如,此表:

id   time                count
1    2012-03-05 12:53:00 1

如果我们在表2中没有任何记录
谢谢

将两个非常简单、不相关的查询组合成一个更复杂的查询并不是获得性能的最佳方法。减少一次往返可能会稍微提高您的效率,但查询很快就会变得无法维护


相反,为了避免额外的往返时间,可以使用类似这样的方法将它们同时发送到数据库。这意味着您可以保持查询的简单性,并且仍然只获得到数据库的一次往返。

因为它们没有任何关联,只是简单的暴力,我会这样做。不实用,但我会这样做

SELECT
      `id`, 
      `time`,
      ( select COUNT(*) 
           FROM table_2 
           WHERE `userid` = 100 ) as UserCount
   FROM 
      table_1 
   WHERE 
      `time` > NOW() 
   ORDER BY 
      `id` DESC 
   LIMIT 1

为什么首先要合并两个完全不相关的查询?想要更好的表现吗?是的。更好的性能。不确定这是否是上述要求,但请注意,如果没有“时间”条目>NOW()@JoachimIsaksson,您是对的,但是在他们想要的上下文中,他们可能会在任何一方都不返回行的情况下失败。但是由于一个字段选择不能返回两列,我不得不在另一列前面输入。我想知道下一票的情况,我很高兴被证明是错误的,但我想知道的不仅仅是有人不同意。
SELECT
      `id`, 
      `time`,
      ( select COUNT(*) 
           FROM table_2 
           WHERE `userid` = 100 ) as UserCount
   FROM 
      table_1 
   WHERE 
      `time` > NOW() 
   ORDER BY 
      `id` DESC 
   LIMIT 1