由mysql定制的订单

时间:2012-01-31 20:57:50

标签: mysql

我有一行存储在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)排序,州应按实体(名称)排序。我怎么能这样做?

1 个答案:

答案 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或更明显的东西。

我还认为创建一个存储有关哪个列的信息的列是一个坏主意。这不仅意味着您每次都必须执行两个查询(一个用于获取订单,一个用于获取实际数据),但您还将不必要地存储大量额外数据。