我有一行存储在mysql表中的实体;
实体表
order
id
name
type (refers to Type(id))
和另一个表中存储的一行类型
输入表格
id
name
order
Type表中的ORDER列指定实体应按什么顺序排序 - 一些应按名称排序,一些按id排序。
如何创建从类型表中获取ORDER BY子句的mysql查询,并通过在Type表中为该实体类型存储的ORDER对实体表中的实体进行排序
例如,假设我有以下行:
实体表:
第1行:
id = 1
name = Virginia
type = 1
第2行:
id = 2
name = Virginia
type = 1
第3行:
id = 3
name = Canada
type = 2
类型(类型表中的行)
第1行
id = 1
name = states
order = "name"
第2行:
id = 2
name = countries
order = id
我想进行以下查询
SELECT entities.id, entities.name FROM entities INNER JOIN type ON entities.type = type.id ORDER BY ....
ORDER BY中的我想根据类型表中ORDER行中存储的内容对实体进行排序。因此,各国应按实体(ID)排序,州应按实体(名称)排序。我怎么能这样做?
答案 0 :(得分:1)
对于数据库来说,这似乎不是一个非常好的设计。对于您的示例,我建议更类似于此:
CREATE TABLE countries (
countryID INT NOT NULL,
countryName VARCHAR(30)
);
CREATE TABLE states (
stateID INT NOT NULL,
countryID INT,
stateName VARCHAR(30)
);
然后您可以执行以下查询:
SELECT c.countryName, s.stateName
FROM countries c LEFT JOIN states s ON c.countryID = s.countryID
ORDER BY countryName, stateName;
在非常,我建议为你的列使用更明显的名称,比如在你的实体表中,你有一个名为'type'的列,它引用了'id'字段。类型表。也许将它们命名为typeID或更明显的东西。
我还认为创建一个存储有关哪个列的信息的列是一个坏主意。这不仅意味着您每次都必须执行两个查询(一个用于获取订单,一个用于获取实际数据),但您还将不必要地存储大量额外数据。