我有这些表格:
表'数据':
| Customer | Category | Brand | Market | A | B |
|==========|==========|=======|========|===|===|
| Bill | 5 | 4 |1 |2 |9 |
| Bill | 5 | 4 |1 |6 |15 |
| Bill | 5 | 4 |1 |1 |30 |
| Greg | 7 | 9 |3 |5 |1 |
| Amy | 9 | 2 |1 |1 |8 |
表'客户':
| Cust | Mkt | SubMkt |
|======|=====|========|
| Bill | 1 | NY |
| Bill | 2 | Arizona|
| Bill | 3 | Cali |
| Greg | 1 | Ohio |
| Amy | 1 | Texas |
表'排序':
| SubMarket | SortBy |
|===========|========|
| Cali | A |
| Ohio | B |
| Arizona | A |
| NY | A |
我需要从几个不同列中排序的“数据”中选择全部,然后根据其他2个表所说的选择A或B。
SELECT *
FROM Data
ORDER BY Customer, Category, Brand, Market, (A or B)
基本上,表Customer
中的Market
和 Data
会链接到Cust
和 Mkt
在表格Customer
中,然后在表格SubMkt
中的Customer
链接到表格SubMarket
中的Sort
。然后表SortBy
中的Sort
将是我需要在表Data
中排序的列。希望这是有道理的。
因此,在上面的示例中,Data
中包含Customer
的“Bill”和Market
的“1”的所有行都将按列{{1}排序}。
我开始在PHP中编写一个对象数组,然后我会根据一个对象属性对数组进行排序,但这实际上需要对我现有的代码进行大规模的改造。我认为我正在寻找的东西可以在MySQL中使用相当直接的查询来完成,但我不太了解MySQL以便编写该查询。任何帮助将不胜感激!
编辑:我应该提到,这些只是部分表格。我正在使用的实际表格是数千行,每个“SubMarket”都有匹配的“SortBy”。
修改2:澄清表A
中需要Customer
和 Market
才能链接到Data
和Cust中的Mkt
。
答案 0 :(得分:1)
您需要CASE
expression。
CASE `Sort`.`SortBy`
WHEN "A" THEN `Data`.`A`
WHEN "B" THEN `Data`.`B`
ELSE NULL
END CASE
ELSE NULL
部分是可选的,但它可以帮助揭示数据问题。
答案 1 :(得分:1)
这只是一个显示如何进行连接的答案.. Ignacio应该有接受的答案,因为他首先提供了难点:)
SELECT d.*
FROM data d
JOIN customers c on c.cust = d.customer AND c.mkt = d.market
JOIN sort s on s.submarket = c.submkt
ORDER BY
d.Customer,
d.Category,
d.Brand,
d.Market,
CASE s.sortby
WHEN 'A' THEN d.A
WHEN 'B' THEN d.B
ELSE 9999999
END