这可以用一个陈述吗?
我的数据库中有多个表。
使用此SELECT
检索sub-sku的数组(也就是产品列表sku's)
SELECT SKU FROM MasterSKU WHERE '4048' IN (AltSKU, SKU_1, SKU_2, SKU_3);
返回
+-------------------+
| SKU |
+-------------------+
| 4048 |
| 4048-SET-15 |
| 4699-4528-4048-EA |
+-------------------+
实际SKU为4048
,结果集是所有与sku连接的产品。
这些SKU位于其他几个表格中,并由电子商务API生成。
这是我的第二个SELECT
语句,用于返回SKU所在位置(通道)以及相关的ItemID。
(SELECT 'store_1' as channel, SKU, ItemID FROM Listings_store1 WHERE SKU = '4048')
UNION
(SELECT 'store_2', SKU, ItemID FROM Listings_store2 WHERE SKU = '4048')
UNION
(SELECT 'store_3', SKU, ItemID FROM Listings_store3 WHERE SKU = '4048')
UNION
(SELECT 'store_4', SKU, ItemID FROM Listings_store4 WHERE SKU = '4048');
这导致
+----------+-------------------+---------------+
| channel | SKU | ItemID |
+----------+-------------------+---------------+
| store_1 | 4048 | 5654515256454 |
| store_1 | 4048-SET-15 | 5654515234536 |
| store_3 | 4699-4528-4048-EA | 5654515243553 |
+----------+-------------------+---------------+
我现在如何在PHP中将第一个SELECT语句转换为数组,然后循环结果以检索结果。像for ($i = 0; $i < $channelskucount; $i++) { $channeldetectquery = "(SELECT 'store_1' as source, SKU FROM Listings_store1 WHERE SKU = '$channelskuarray[$i]') . . .
合并这两个查询是否可行或可行?由于第一个select语句通常作为一个数组,我用PHP中的第二个循环,我不知道从哪里开始。
结束输出类似
+--------------+----------+-------------------+---------------+
| InventorySKU | channel | SKU | ItemID |
+--------------+----------+-------------------+---------------+
| 4048 | store_1 | 4048 | 5654515256454 |
| 4048 | store_1 | 4048-SET-15 | 5654515234536 |
| 4048 | store_3 | 4699-4528-4048-EA | 5654515243553 |
+--------------+----------+-------------------+---------------+
任何提示/帮助真的很感激。我意识到我的第一个表并没有完全正常化,但是我试图完成我的第一个大型数据库项目,所以我已经学习并且一直在学习很多东西。
答案 0 :(得分:2)
如果你做一个次要的,非常需要的数据重组,肯定可以[在一个查询中执行]。事实上,您的问题完美地阐明了当前结构的问题。不同商店的列表不应各自拥有自己的数据表。应该有一个'store'表,其中包含id键,商店名称,商店描述,地址等的列。然后你就会有一个'Listings'表和一个额外的列,查找(一个外键) (关系)到'store'表的id键,然后是其他已存在的东西(sku,ItemID等)。应该不难做到,你只需要做一次。您可以创建表格并强制它:
INSERT into Listings (StoreID, SKU, ItemID,...)
SELECT 1, SKU, ItemID,... FROM Listings1
INSERT into Listings (StoreID, SKU, ItemID,...)
SELECT 2, SKU, ItemID,... FROM Listings2
...
或者以不可原谅的懒惰方式做到这一点,即使提到我也应该严厉训斥(你绝对应该仔细检查你的列数据类型并添加索引):
SELECT 1 as StoreID, *
INTO Listings
FROM Listings1
UNION
SELECT 2, *
UNION
SELECT 3, *
UNION
SELECT 4, *
...
然后,您只需将此表连接到master_sku并存储表...就像这样:
DECLARE @InventorySKU as varchar(20)
SET @InventorySKU = '4084'
SELECT @InventorySKU as InventorySKU, s.StoreName as channel, l.SKU, l.ItemID
FROM Listings l
INNER JOIN MasterSKU ms on ms.SKU = l.SKU
INNER JOIN Stores s on s.ID = l.StoreID
WHERE
ms.AltSKU LIKE '%' + @InventorySKU + '%' OR
ms.SKU_1 LIKE '%' + @InventorySKU + '%' OR
ms.SKU_2 LIKE '%' + @InventorySKU + '%' OR
ms.SKU_3 LIKE '%' + @InventorySKU + '%'
我希望这会有所帮助。