无法从mysql将两个查询的结果合并为一个查询
我有两个问题。第一个将返回10行,第二个查询将返回2行。但是,当我将查询合并为一个查询时,它仍然只返回10行 以下是我的疑问无法从mysql将两个查询的结果合并为一个查询,mysql,sql,Mysql,Sql,我有两个问题。第一个将返回10行,第二个查询将返回2行。但是,当我将查询合并为一个查询时,它仍然只返回10行 以下是我的疑问 SELECT * FROM contentmsg WHERE apmc_id = '5284a327e4b0bc1eaf3d118e' AND commodity_id IS NULL AND lang_id IS NULL AND date < '2014-07-05 09:25' AND
SELECT *
FROM contentmsg
WHERE apmc_id = '5284a327e4b0bc1eaf3d118e'
AND commodity_id IS NULL
AND lang_id IS NULL
AND date < '2014-07-05 09:25'
AND date >= '2014-06-13 14:17:22'
ORDER BY -date
LIMIT 0, 10
选择*
来自contentmsg
其中apmc_id='5284a327e4b0bc1eaf3d118e'
商品标识为空
并且lang_id为空
日期<'2014-07-05 09:25'
日期>='2014-06-13 14:17:22'
按日期订购
限制0,10
输出
两张唱片
SELECT *
FROM contentmsg
WHERE apmc_id = '5284a327e4b0bc1eaf3d118e'
AND commodity_id IN ( '5226d086e4b05917e5ca33bc', '5226d086e4b05917e5ca33b6', '5226d086e4b05917e5ca33d9', '5226d086e4b05917e5ca3408',
'5226d086e4b05917e5ca33e1', '5226d086e4b05917e5ca33ec', '5226d086e4b05917e5ca33b4' )
AND lang_id = '51fb5a2ee4b0e18f7f89ecc8'
AND date < '2014-07-05 09:25'
AND date >= '2014-06-13 14:17:22'
ORDER BY date
LIMIT 0, 10
选择*
来自contentmsg
其中apmc_id='5284a327e4b0bc1eaf3d118e'
以及("5226d086e4b05917e5ca33bc","5226d086e4b05917e5ca33b6","5226d086e4b05917e5ca33d9","5226d086e4b05917e5ca3408",,
‘5226d086e4b05917e5ca33e1’、‘5226d086e4b05917e5ca33ec’、‘5226d086e4b05917e5ca33b4’)
而lang_id='51fb5a2ee4b0e18f7f89ecc8'
日期<'2014-07-05 09:25'
日期>='2014-06-13 14:17:22'
按日期订购
限制0,10
输出
10项记录
这些查询之间的唯一区别是,在第一个查询中,商品id设置为null,lang\u id设置为null
我尝试了这个查询,在其中添加了“或”
选择*
来自contentmsg
其中apmc_id='5284a327e4b0bc1eaf3d118e'
商品标识为空
或商品id位于('5226d086e4b05917e5ca33bc','5226d086e4b05917e5ca33b6','5226d086e4b05917e5ca33d9','5226d086e4b05917e5ca3408',',
‘5226d086e4b05917e5ca33e1’、‘5226d086e4b05917e5ca33ec’、‘5226d086e4b05917e5ca33b4’)
并且lang_id为空
或lang_id='51fb5a2ee4b0e18f7f89ecc8'
日期<'2014-07-05 09:25'
日期>='2014-06-13 14:17:22'
按日期订购
限制0,10
查询中是否有错误?您需要注意with
和
&或
运算符(和
在或
之前进行评估)。要解决此问题,请将操作括在括号中:
SELECT *
FROM contentmsg
WHERE apmc_id = '5284a327e4b0bc1eaf3d118e'
AND ( commodity_id IN ( '5226d086e4b05917e5ca33bc', '5226d086e4b05917e5ca33b6', '5226d086e4b05917e5ca33d9', '5226d086e4b05917e5ca3408',
'5226d086e4b05917e5ca33e1', '5226d086e4b05917e5ca33ec', '5226d086e4b05917e5ca33b4' )
AND lang_id = '51fb5a2ee4b0e18f7f89ecc8' )
OR ( commodity_id IS NULL
AND lang_id IS NULL )
AND date < '2014-07-05 09:25'
AND date >= '2014-06-13 14:17:22'
ORDER BY -date
选择*
来自contentmsg
其中apmc_id='5284a327e4b0bc1eaf3d118e'
和(商品id位于('5226d086e4b05917e5ca33bc'、'5226d086e4b05917e5ca33b6'、'5226d086e4b05917e5ca33d9'、'5226d086e4b05917e5ca3408',
‘5226d086e4b05917e5ca33e1’、‘5226d086e4b05917e5ca33ec’、‘5226d086e4b05917e5ca33b4’)
和lang_id='51fb5a2ee4b0e18f7f89ecc8')
或(商品标识为空)
并且lang_id为空)
日期<'2014-07-05 09:25'
日期>='2014-06-13 14:17:22'
按日期订购
查询返回的记录数没有区别。您的LIMIT
子句将结果集限制为10行。我不认为LIMIT 0,10
与此有关。哇。。完成。:)我真的很抱歉。输出正确,但两条记录在日期之后。。因此,在输出中,它不会出现。。谢谢一个朋友:)就我个人而言,我会在那里再放一组参数,并改变缩进,只是为了清晰起见,所以整个商品id/语言id概念都在它自己的小团体中,而且很明显ands和ors都是关于什么的。@JoeEnos。。谢谢你的信息。你能告诉我你想怎么做吗?所以它对我有用?@NizamAli我不想用我的格式编辑问题或答案,但基本上我所说的是混合和匹配and和or只是让你思考操作顺序。如果WHERE子句只包含AND或ORs,那么阅读起来就容易多了(当然是IMO)。因此这将是,其中apmc\u id='x'和((商品id in()和lang\u id='x')或(商品id为null,lang\u id为null))和日期<'x'和日期>=x
。这些外部参数将垂直排列并表示单个条件,这样WHERE子句只包含and。
SELECT *
FROM contentmsg
WHERE apmc_id = '5284a327e4b0bc1eaf3d118e'
AND ( commodity_id IN ( '5226d086e4b05917e5ca33bc', '5226d086e4b05917e5ca33b6', '5226d086e4b05917e5ca33d9', '5226d086e4b05917e5ca3408',
'5226d086e4b05917e5ca33e1', '5226d086e4b05917e5ca33ec', '5226d086e4b05917e5ca33b4' )
AND lang_id = '51fb5a2ee4b0e18f7f89ecc8' )
OR ( commodity_id IS NULL
AND lang_id IS NULL )
AND date < '2014-07-05 09:25'
AND date >= '2014-06-13 14:17:22'
ORDER BY -date