我正在研究一种处理订单的方法,我必须满足多个供应商的订单,并且我想知道哪两个供应商可以提供给定订单。
我的订单中的product_id是10,20,30,40,50
SELECT *
FROM vendors
WHERE product_id IN (10,20,30,40,50)
请给我所有拥有至少一种产品的供应商
vendor_id | product_id
1234 10
1234 20
1234 30
1234 40
1235 10
1235 40
1236 20
1236 30
1236 40
1237 50
9876 10
9876 20
9876 30
9876 40
9877 10
9877 40
9877 50
9878 10
9878 20
9878 30
9878 50
经过几次疯狂的子查询(时间太长,无法在此处发布)之后,我可以转到一张表,向我显示每个供应商所缺少的东西,我的想法是,然后根据那些缺失的商品将其加入该表,然后向供应商显示谁有完善的清单。
结果应该看起来像(逗号分隔与否无关紧要,只是易于阅读)
vender_1 | product_id | missing_product_id | vendor_2
1234 10,20,30,40 50 9876,9878
1235 10,40 20,30,50 9878
1236 20,30,40 10,50 9877
1237 50 10,20,30,40 1234
或
vender_1 | product_id | missing_product_id | vendor_2
1234 10
1234 20
1234 30
1234 40
1234 50 9876
1234 50 9878
等...
答案 0 :(得分:0)
您想要<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="app.coinverse.home.HomeViewModel" />
</data>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|snap">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/padding_small"
android:paddingRight="@dimen/padding_small">
<ImageView
android:id="@+id/profileButton"
android:layout_width="@dimen/toolbar_button_dimen"
android:layout_height="@dimen/toolbar_button_dimen"
android:layout_gravity="start"
android:contentDescription="@string/profile_content_description"
android:src="@drawable/ic_astronaut_color_accent_24dp"
app:layout_constraintLeft_toLeftOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
<FrameLayout
android:id="@+id/priceContainer"
android:name="app.carpecoin.PriceDataFragment"
android:layout_width="match_parent"
android:layout_height="@dimen/price_graph_height"
app:layout_collapseMode="parallax"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bottomSheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_large"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<ImageView
android:id="@+id/bottom_handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_bottom_sheet_handle"
android:contentDescription="@string/saved_bottomsheet_handle_content_description"
android:elevation="@dimen/bottom_sheet_elevation_height"
android:src="@drawable/ic_save_planet_dark_48dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/bottom_handle_elevation"
android:layout_width="0dp"
android:layout_height="@dimen/bottom_sheet_elevation_height"
android:background="@color/bottom_sheet_handle_elevation"
android:contentDescription="@string/saved_bottomsheet_handle_content_description"
app:layout_constraintBottom_toBottomOf="@id/bottom_handle"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<FrameLayout
android:id="@+id/savedContentContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/bottom_handle_elevation" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
和<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="app.coinverse.content.ContentViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/contentFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/actionbar"
layout="@layout/toolbar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/contentRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/actionbar" />
<include
android:id="@+id/emptyContent"
layout="@layout/empty_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/actionbar" />
</RelativeLayout
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
:
{
"httpMethod": "GET",
"resourcePath": "/deployment",
"status": "403",
"protocol": "HTTP/1.1",
"responseLength": "42"
}
对于多个供应商,您可以扩展上述逻辑。想法是将表连接在一起以获取供应商对以及他们在一起拥有的所有产品的列表。然后,执行与上述相同的逻辑:
"DeploymentApiGatewayMetricFilter": {
"Type": "AWS::Logs::MetricFilter",
"Properties": {
"LogGroupName": "/aws/apigateway/DeploymentApiGatewayLogGroup",
"FilterPattern": "{ $.status = \"403\" }",
"MetricTransformations": [
{
"MetricValue": "1",
"MetricNamespace": "ApiGateway",
"DefaultValue": 0,
"MetricName": "DeploymentApiGatewayUnauthorized"
}
]
}
}
您实际上可以在子查询中进行产品过滤-使查询更高效。为了使其更通用,“ 5”是项数。我不知道最终查询是如何构建的。
编辑II:
这是一个处理大量数据的难题。如果您有很多产品而很少有供应商,这是另一种可能会更好的方法:
"{ $.status = 403 }" <- no escaped characters
{ $.status = 403 } <- using a json object instead of string
注意:如果一个供应商拥有所有产品,则它将与其他所有供应商配对。