Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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,有没有一种方法可以组合这两个MySQL查询?目前这使得排序和分页等变得非常困难 SELECT * FROM (`lb_sales`) WHERE `recurring` = '0' AND `created` >= '2012-10-01 00:00:00' AND `created` <= '2012-10-30 23:59:59' AND `status` = 'pending' AND `type` = 'sale' AND `account_id` = '2' ORD

有没有一种方法可以组合这两个MySQL查询?目前这使得排序和分页等变得非常困难

SELECT *
FROM (`lb_sales`)
WHERE `recurring` =  '0'
AND `created` >= '2012-10-01 00:00:00'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5;

SELECT *
FROM (`lb_sales`)
WHERE `recurring` =  '1'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5;
选择*
FROM(`lb_sales`)
其中“重复性”=“0”
和“创建”>=“2012-10-01 00:00:00”

和'created`尝试
UNION ALL
,只需确保列对齐即可。另外,不要使用
选择*
。始终指定列列表

SELECT col1, col2, ...
FROM (`lb_sales`)
WHERE `recurring` =  '0'
AND `created` >= '2012-10-01 00:00:00'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5
UNION ALL
SELECT col1, col2, ...
FROM (`lb_sales`)
WHERE `recurring` =  '1'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5;
选择col1、col2。。。
FROM(`lb_sales`)
其中“重复性”=“0”
和“创建”>=“2012-10-01 00:00:00”
然后“创建”
SELECT*
FROM(`lb_sales`)
其中((`recurtive`='0'
和“创建”>=“2012-10-01 00:00:00”
和“创建”尝试:

SELECT*FROM(`lb_sales`)
其中(`Recurtive`='0'和`created`>='2012-10-01 00:00:00'
然后“创建”
SELECT*
FROM(`lb_sales`)
其中(`recurtive`='0'
和“创建”>=“2012-10-01 00:00:00”
然后“创建”
SELECT*
FROM(`lb_sales`)
哪里
(
`重复出现的“=“0”
和“创建”>=“2012-10-01 00:00:00”


和“创建”原始查询,每个查询最多返回5条记录(即总共最多10条),而此查询最多返回10个记录中的5个。很好的一点…我已将限制设置为10,但显然无法保证结果集将从Recurrence=0集生成5行,从Recurrence=1集生成5行。原始查询每个最多返回5条记录(即总共10条),而此查询最多返回10条记录中的5条。这是因为您必须更改结尾处的限制,但如果他希望返回与原始查询中相同的记录,则仅调整此
limit
子句无法实现这一点。假设设置
limit 10
,但
recurtive=1
中还有5条记录至少是在
recurtive=0
中的任何一个之前排序的。那么他不可能通过一个查询实现这一点,也许一个带有游标的sql脚本可以帮助一个
联合
查询实现这一点。不一样,你的查询可以返回5行,他的原始查询可以返回10行。你是对的,但是你可以告诉我这是我们都没有解决的问题。我对原始问题提出了一个问题,看看我们是否可以获得更多信息。原始查询每个返回最多5条记录(即总共10条),而此查询最多返回10条记录中的5条。OP可以根据需要更改
限制
。但是,如果他希望返回与原始查询中相同的记录,仅调整此
限制
子句将无法实现此目的。假设设置了
限制10
,但
重复=1排序在
recurtive=0
中的任何一个之前。正确,因此他需要计算出在组合查询中他想要得到多少行。但我的观点是,
LIMIT
的值很可能不会返回与最初两个查询中相同的结果。许多注释都可以看出这一点wn以下,您的限制可能是一个问题。这两种类型的记录中有5个是很重要的,还是总共有5个工作,还是总共有10个工作?还有,您使用什么设置进行分页和排序?是服务器端还是客户端?是框架还是您自己编写的东西?这些都是很小的回报,可能会带来更多的回报然后,您的分页设置将重点放在合并这两个记录上。@FrankB:UNION
克服了
限制
问题。感谢您的良好响应。我正在使用CodeIgniter进行分页和排序。它将返回最多10个结果。FrankMartin因此,如果我理解正确,将限制设置为10将对大多数ans产生影响下面的答案能满足你的需要吗?@eggyal你完全正确,因此我投了赞成票。但如果他只想在记录集中排名前10位,并且符合这两个标准,那么工会就没有必要了。
SELECT *
FROM (`lb_sales`)
WHERE ((`recurring` =  '0'
AND `created` >= '2012-10-01 00:00:00'
AND `created` <= '2012-10-30 23:59:59')
OR (`recurring` =  '1'
AND `created` <= '2012-10-30 23:59:59'))
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 10;
SELECT *  FROM (`lb_sales`)
WHERE (`recurring` =  '0' AND `created` >= '2012-10-01 00:00:00'
 AND `created` <= '2012-10-30 23:59:59' ) 
OR (`recurring` =  '1' AND `created` <= '2012-10-30 23:59:59')    
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5;
SELECT *
FROM (`lb_sales`)
WHERE ( `recurring` =  '0' 
AND `created` >= '2012-10-01 00:00:00'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2' ) 
OR  (`recurring` =  '1'
AND `created` <= '2012-10-30 23:59:59'
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2' )
ORDER BY `id` ASC
LIMIT 5;
SELECT *
FROM (`lb_sales`)
WHERE
(
`recurring` =  '0'
AND `created` >= '2012-10-01 00:00:00'
AND `created` <= '2012-10-30 23:59:59'
)
OR
( 
`recurring` =  '1'
AND `created` <= '2012-10-30 23:59:59'
)
AND `status` =  'pending'
AND `type` =  'sale'
AND `account_id` =  '2'
ORDER BY `id` ASC
LIMIT 5;