2013-03-09 4 views
11

मैं विषय वस्तु योग्यता सूची तैयार करने की कोशिश कर रहा हूं। मैं इस mysql query उपयोग कर रहा हूँ:दो कॉलम ऑर्डर करने के लिए MySQL क्वेरी, एक एएससी अन्य डीईएससी

SELECT * 
FROM results 
ORDER BY qid ASC, 
    marks DESC 

परिणाम है:

enter image description here

लेकिन क्या मैं जरूरत है इस तरह है (अंक कॉलम पर गौर करें, मैं marks द्वारा आदेश दिया, एक ही qid पंक्तियों प्राप्त करने की आवश्यकता) :

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 @OLD_C[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

+1

जो मेरे द्वारा संपादित किया गया था: डी, ​​कृपया 'qid' और 'marks' के बिना कुछ और नहीं सोचें :) –

उत्तर

14

यह आपको वास्तव में क्या जरूरत है:

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

हाँ यह काम किया, धन्यवाद –

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

थोड़ा टाइपो:' पी 1% ' – hjpotter92

+0

@DreamEater निश्चित। धन्यवाद .. –

+0

लेकिन तालिका में केवल EN और P1 के बिना कई चीज़ें हो सकती हैं। मैं उन्हें आदेश देना क्यों पसंद करता हूं। –

0

यह आपकी मदद कर सकता है:

SELECT * 
    FROM results 
ORDER BY SUBSTRING(qid FROM 1 FOR 9) ASC, 
     marks DESC 
संबंधित मुद्दे