让字段值设置Mysql中的排序顺序方向
鉴于下表:让字段值设置Mysql中的排序顺序方向,mysql,sql,select,sql-order-by,Mysql,Sql,Select,Sql Order By,鉴于下表: CREATE TABLE `example` ( `Identifier` int(11) NOT NULL AUTO_INCREMENT, `FieldValue` varchar(255) DEFAULT NULL, `FieldOrder` enum('asc','desc') DEFAULT 'asc', PRIMARY KEY (`Identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 我想运行一个查询,根据F
CREATE TABLE `example` (
`Identifier` int(11) NOT NULL AUTO_INCREMENT,
`FieldValue` varchar(255) DEFAULT NULL,
`FieldOrder` enum('asc','desc') DEFAULT 'asc',
PRIMARY KEY (`Identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想运行一个查询,根据FieldOrder字段中的值对FieldValue字段进行排序。例如
Select * from example order by FieldValue [here should the FieldOrder value be placed]
是否可以在查询的排序部分引用FieldOrder字段?一种方法是分别将
FieldValue
的值“asc”和“desc”视为正值或负值。这可以用大小写
表达式表示:
SELECT *
FROM example
ORDER BY CASE FieldOrder WHEN 'asc' THEN 1 ELSE -1 END * FieldValue
据我所知
请注意,每一行都有一个字段顺序
,因此您想要实现的目标似乎有问题。如果一行显示为asc
,另一行显示为desc
,该怎么办?那么,这两行的顺序应该如何显示呢
如果您想通过Actuple实现参数化<代码>订单,您可以考虑使用以下两种方法:
排序顺序
您需要规范化数据并将其存储在更好的模式中。不要在单个字段中存储多个值,每行仅存储一个值。您可以做的是将多个数据存储在自己的表中,其中每个数据段都位于自己的行中 尝试以下模式:
CREATE TABLE `example` (
`Identifier` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`Identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `exampleData` (
`RowID` int(11) NOT NULL AUTO_INCREMENT,
`Identifier` int(11) NOT NULL,
`FieldValue` varchar(255) DEFAULT NULL,
PRIMARY KEY (`RowID`),
INDEX `Identifier` (`Identifier`),
FOREIGN KEY (Identifier) REFERENCES example(Identifier)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在有了两个表,在exampleData
表中,FieldValue
中的每个数据段都有一行
现在您可以这样查询:
SELECT Identifier, FieldValue
FROM example
JOIN exampleData USING(Identifier)
WHERE Identifier = 3
ORDER BY FieldValue ASC
这个问题不够清楚。请添加一些示例来说明您正试图实现的目标。如果表中有两条记录,这将如何工作;一个说应该上升,一个说下降?请提供示例,
FieldValue
包含哪些内容?它是否碰巧包含多个值(逗号分隔)?如果是,请不要在一个字段中存储多个值。使用链接表并“规范化”数据库。@Mr47 FieldOrder的值始终相同。基线数据已分组。每组记录都有自己的排序顺序。但是一次只查询一个组。这个例子只是一个非常简化的版本。@Nebu:如果一次只查询“组”,那么这个表结构是不正确的。您真正想要的是一个表,其中每个组有多行,每行包含一个值。然后您只需查询gor标识符并根据需要进行排序。当您确定字段顺序列时,我没有注意到它:)+1这对于数值非常有用。您还可以为字母值提供解决方案吗?