我有一个汽车经销商分类网站。为了理解如何做到这一点,我省略了表结构的细节,以使这个示例变得简单。
经销商要么是铜,银,金,白金经销商出售汽车,卡车,货车,SUV
比如说汽车、卡车、货车和SUV都在他们自己的桌子上。因此,我们有以下表格:
1. Dealers (DealerID, DealerName, DealerLevel <-- 1 for Bronze, 2 for Silver, etc.)
2. Cars (CarID, DealerID, CarName)
3. Trucks (TruckID, DealerID, TruckName
4. Vans (VanID, DealerID, VanName)
5. SUVs (SUVID, DealerID, SUVName)我们可以这样说:
SELECT DealerID, DealerName AS Title FROM Dealers
UNION ALL
SELECT CarID, CarName AS Title FROM Cars
UNION ALL
SELECT TruckID, TruckName AS Title FROM Trucks
UNION ALL
SELECT VanID, VanName AS Title FROM Vans
UNION ALL
SELECT SUVID, SUVName AS Title FROM SUVs我需要的结果是按以下顺序在每一个区块。我说阻止不同的工会,但我理解这是一个单一的结果集在最后。
第一街区:首先列出所有经销商的顺序为白金,然后是金,银和铜。对白金、金、银和铜进行随机排序(所以没有人抱怨总是有人在他们上面出现)。
第二个块:用前面提到的方法列出所有的汽车。
第三,第四,等等。
你可能想知道,为什么?我正在为结果生成一个完整的JSON输出,该结果以它们的类别为标记,并在jQuery自动建议/完整插件中进行了解析。当你看到不同的标题和章节时,想想Facebook吧。
谢谢您的建议和/或例子!
发布于 2014-02-04 09:50:13
为每个选择添加一个常量,并使用它来定义块。然后按照这个常量进行排序,以及您可能想要对数据进行排序的任何其他值(如您的示例中的DealerLevel)。要随机排序,添加一个NEWID()列:
SELECT DealerID, DealerName
FROM
(
SELECT 1 AS MyConst, DealerLevel, DealerID, DealerName AS Title
FROM Dealers
UNION ALL
SELECT 2, DealerLevel, CarID, CarName
FROM Cars INNER JOIN Dealers ON Dealers.DealerId = Cars.DealerId
UNION ALL
SELECT 3, DealerLevel, TruckID, TruckName
FROM Trucks INNER JOIN Dealers ON Dealers.DealerId = Trucks.DealerId
UNION ALL
SELECT 4, DealerLevel, VanID, VanName
FROM Vans INNER JOIN Dealers ON Dealers.DealerId = Vans.DealerId
UNION ALL
SELECT 5, DealerLevel, SUVID, SUVName
FROM SUVs INNER JOIN Dealers ON Dealers.DealerId = SUVs.DealerId
) T
ORDER BY MyConst, DealerLevel DESC, NEWID() ;https://stackoverflow.com/questions/21548415
复制相似问题