2013-03-09 67 views
11

我正在尝试编写一个主题明智的优点列表。我用这mysql queryMySQL查询命令两列,一个ASC另一个DESC

SELECT * 
FROM results 
ORDER BY qid ASC, 
    marks DESC 

结果是:

enter image description here

但我需要的是这样的(看马克列,我需要得到相同qid行,由marks订购) :

enter image description here

请人帮我。

更新: 而这是result.sql文件在您的电脑中创建表。

-- phpMyAdmin SQL Dump 
-- version 3.5.2.2 
-- http://www.phpmyadmin.net 
-- 
-- Host: 127.0.0.1 
-- Generation Time: Mar 09, 2013 at 05:40 PM 
-- Server version: 5.5.27 
-- PHP Version: 5.4.7 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `ges_omeca` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `results` 
-- 

CREATE TABLE IF NOT EXISTS `results` (
    `exam_id` int(11) NOT NULL AUTO_INCREMENT, 
    `sid` varchar(50) NOT NULL, 
    `qid` varchar(100) NOT NULL, 
    `corrects` int(3) NOT NULL, 
    `total_qs` int(3) NOT NULL, 
    `marks` float NOT NULL, 
    `date_time` datetime NOT NULL COMMENT 'DateTime when user submits the answer script.', 
    PRIMARY KEY (`exam_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

-- 
-- Dumping data for table `results` 
-- 

INSERT INTO `results` (`exam_id`, `sid`, `qid`, `corrects`, `total_qs`, `marks`, `date_time`) VALUES 
(1, 'guest', 'EN_(Set-B)_(07.02.13)', 37, 40, 36.25, '2023-02-13 01:10:00'), 
(2, 'guest', 'EN_(Set-B)_(07.02.13)', 11, 40, 10.25, '2013-02-23 01:56:58'), 
(3, 'guest', 'P1_(Set-D)_(10.02.13)', 2, 100, 36.25, '2013-02-23 03:42:57'), 
(4, 'guest', 'P1_(Set-B)_(09.02.13)', 5, 40, 5, '2013-02-23 03:46:59'), 
(5, 'guest', 'EN_(Set-A)_(07.02.13)', 1, 40, 0.25, '2013-02-23 04:46:59'), 
(6, 'guest', 'EN_(Set-A)_(07.02.13)', 6, 40, 5.5, '2013-02-23 04:59:59'), 
(7, 'guest', 'P1_(Set-D)_(10.02.13)', 10, 100, 9.25, '2013-02-24 08:57:17'), 
(8, 'guest', 'P1_(Set-B)_(09.02.13)', 5, 40, 5, '2013-02-24 01:23:50'), 
(9, 'guest', 'EN_(Set-D)_(07.02.13)', 0, 40, -0.5, '2013-02-25 12:45:33'), 
(10, 'guest', 'EN_(Set-D)_(07.02.13)', 2, 40, 1.5, '2013-02-25 01:45:38'), 
(11, 'guest', 'P1_(Set-B)_(09.02.13)', 2, 40, 2, '2013-02-25 04:06:28'), 
(12, 'guest', 'EN_(Set-C)_(07.02.13)', 5, 40, 4.5, '2013-02-25 04:42:27'), 
(13, 'guest', 'P1_(Set-C)_(10.02.13)', 6, 40, 6, '2013-02-25 05:00:57'); 

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
+0

日期'2023-02-13'对我来说似乎合法。你如何产生期望的结果? – hjpotter92 2013-03-09 16:31:23

+1

这是我编辑过的:D,请不要以为只有'qid'和'marks'就不要以为别的:) – 2013-03-09 16:35:11

回答

14

这是您需要的东西:

SELECT * 
FROM results 
ORDER BY SUBSTRING(qid 
FROM 1 
FOR 1) ASC , marks DESC 
+0

是的,它的工作,谢谢 – 2013-03-09 18:22:38

1

我真的不明白你的问题,但看这个结果,我已经注意到,记录由qid包含EN是第一个结果列表进行排序。

试试这个,

SELECT * 
FROM tableName 
ORDER BY CASE WHEN qid LIKE 'EN%' THEN 0 
       WHEN qid LIKE 'P1%' THEN 1 
       ELSE 2 
      END ASC, 
      marks DESC 
+1

有点错字:'P1%' – hjpotter92 2013-03-09 16:35:02

+0

@DreamEater固定。谢谢.. – 2013-03-09 16:36:22

+0

但表中可能包含很多东西,而不仅仅是EN和P1。这就是为什么我想要订购他们。 – 2013-03-09 16:38:04

0

这可以帮助你:

SELECT * 
    FROM results 
ORDER BY SUBSTRING(qid FROM 1 FOR 9) ASC, 
     marks DESC