Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 MSSQL查询调优_Php_Sql Server_Union - Fatal编程技术网

Php MSSQL查询调优

Php MSSQL查询调优,php,sql-server,union,Php,Sql Server,Union,我有以下情况: 1个客户端有2个产品列表(一个普通,一个专用),这些列表有许多产品,一些产品可以出现在两个列表中。如果产品出现在私有列表中,我想获取它,否则我将获取公共列表中的产品 你认为实现这一目标的最快方法是什么?到目前为止,我尝试了以下方法: 联合所有然后在PHP中删除重复项(性能一般) 工会(表现不佳) 是否还有其他可能实现这一目标 编辑 这是一把小提琴,展示了我所拥有的一切 在fiddle中,我假设列表id为7和1,因为它们是客户1的列表id,我使用了no-join,因为我已经从p

我有以下情况:


1个客户端有2个产品列表(一个普通,一个专用),这些列表有许多产品,一些产品可以出现在两个列表中。如果产品出现在私有列表中,我想获取它,否则我将获取公共列表中的产品

你认为实现这一目标的最快方法是什么?到目前为止,我尝试了以下方法:

  • 联合所有然后在PHP中删除重复项(性能一般)
  • 工会(表现不佳)
是否还有其他可能实现这一目标

编辑

这是一把小提琴,展示了我所拥有的一切

在fiddle中,我假设列表id为7和1,因为它们是客户1的列表id,我使用了no-join,因为我已经从php中检索到了这些id

我需要的是从私有列表(如果存在)检索产品,否则从公共列表检索

作为一个mysql的家伙,我通常会在没有聚合的情况下使用group by来完成这项工作,因此mysql使用正确顺序的taht将简单地删除不需要的记录(不好的做法,但足够可靠和性能):

因此,例如,如果我想获得客户端id为1的所有产品,我需要检索这些产品:

ID  ARTNUM  ARTDES  LISTID  PRICE
1   1000    potatoes    1   20
1   1001    carrots     7   4
因为客户端1有两个列表:1和7(土豆同时出现在列表1和7中,所以我只希望土豆出现在客户端私有列表中,而不是公共列表中)


希望我足够清楚,为所有这些编辑感到抱歉,因为我不知道如何在纯SQL中正确执行此操作,我使用了一种PHP方法:

  • 检索不带UNION/UNION ALL的两个查询
  • 创建2个php集合
  • 合并2个集合以删除重复项

能否提供一些示例数据和预期输出?另外,请发布您尝试过的产品。我添加了一个小提琴,演示了我需要的产品。您可以发布您的预期输出吗?是的,对不起,让我更新我的答案“某些产品可以出现在两个列表中”-这是最佳设计吗?为什么不创建一个包含新列的列表,其中包含私有/公共/两者的枚举?
ID  ARTNUM  ARTDES  LISTID  PRICE
1   1000    potatoes    1   20
1   1001    carrots     7   4