Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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/2/spring/13.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 如何将几乎相同的多个查询合并为一个查询?_Sql_Mysql - Fatal编程技术网

Sql 如何将几乎相同的多个查询合并为一个查询?

Sql 如何将几乎相同的多个查询合并为一个查询?,sql,mysql,Sql,Mysql,假设我有一个order\u dummy表,其中存储了order\u dummy\u id、order\u id、user\u id、book\u id、author\u id。你可能会抱怨我桌子的逻辑性,但我还是需要这样做。我想执行以下查询 SELECT * FROM order_dummy WHERE order_id = 1 AND user_id = 1 AND book_id = 1 ORDER BY `order_dummy_id` DESC LIMIT 1 SELECT * F

假设我有一个
order\u dummy
表,其中存储了
order\u dummy\u id、order\u id、user\u id、book\u id、author\u id
。你可能会抱怨我桌子的逻辑性,但我还是需要这样做。我想执行以下查询

SELECT * 
FROM order_dummy
WHERE order_id = 1
AND user_id = 1
AND book_id = 1
ORDER BY `order_dummy_id` DESC
LIMIT 1

SELECT * 
FROM order_dummy
WHERE order_id = 1
AND user_id = 1
AND book_id = 2
ORDER BY `order_dummy_id` DESC
LIMIT 1

SELECT * 
FROM order_dummy
WHERE order_id = 1
AND user_id = 1
AND book_id = 3
ORDER BY `order_dummy_id` DESC
LIMIT 1
请记住,同一本书的多个编号包含在一个订单中。因此,我通过降序和限制
1
列出
order\u dummy\u id
,因此只显示书籍的最新顺序。但我的目标是以这种方式在一张桌子上展示其他书籍。我用了
groupby
像这样

SELECT * 
FROM order_dummy
WHERE order_id = 1
AND user_id = 1
GROUP BY book_id
但它只显示带有递增结果的
顺序\u伪\u id
。我再也不知道了。期待您的帮助

您需要更改表之间的关系。 图书id不应在订单行中,因为每个订单可以有多本图书。您需要有一个名为“ordered items”的表,并将您的书籍与订购数量一起存储在该表中—无需多行

要回答您的问题,我可以指向中的SQL运算符

select * from table where id in (1,2,3)
此外,根据您可以使用的上下文或运算符

select * from table where id = 1 or id = 2 or id =3
您需要更改表之间的关系。 图书id不应在订单行中,因为每个订单可以有多本图书。您需要有一个名为“ordered items”的表,并将您的书籍与订购数量一起存储在该表中—无需多行

要回答您的问题,我可以指向
中的SQL运算符

select * from table where id in (1,2,3)
此外,根据您可以使用的上下文或运算符

select * from table where id = 1 or id = 2 or id =3

要一次性获得多个选择的结果,请使用:


要一次性获得多个选择的结果,请使用:


谢谢你的建议。如果我想合并以上16个查询,这是否有效?@Devyn:如果您在(订单id、用户id、书籍id、订单虚拟id)上有索引,则此查询将非常有效。但这是一个非常丑陋的问题。在决定使用哪个查询时,性能或可读性/可维护性是最重要的方面吗?我真的没有其他方法:(我已经尽了最大的努力。将来我可能会更改该查询,但我必须向前一步完成我的项目。谢谢你的建议。如果我想合并以上16个查询,这是否有效?@Devyn:如果你在(订单id、用户id、图书id、订单虚拟id)上有索引,该查询将非常有效。)。但这是一个非常丑陋的查询。性能或可读性/可维护性是决定使用哪个查询的最重要方面吗?我真的没有其他方法:(我已经尽了最大的努力。将来我可能会改变这个问题,但我必须完成我的项目。@abatishchev请不要编辑我的英语。Normalize是我在英国生活时使用的英国拼写。Normalize是美国的!@abatishchev请不要编辑我的英语。Normalize是我在英国生活时使用的英国拼写。Normalize是一种语言。)美国佬!