-- phpMyAdmin SQL Dump
-- version 2.10.2
-- http://www.phpmyadmin.net
-- 
-- 主机: localhost
-- 生成日期: 2013 年 01 月 25 日 06:32
-- 服务器版本: 5.0.45
-- PHP 版本: 5.2.3SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";-- 
-- 数据库: `test`
-- -- ---------------------------------------------------------- 
-- 表的结构 `location`
-- CREATE TABLE `location` (
  `location_id` int(10) unsigned NOT NULL,
  `score` int(10) unsigned NOT NULL,
  `welcome` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`location_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;-- 
-- 导出表中的数据 `location`
-- INSERT INTO `location` VALUES (1000, 50, 1);
INSERT INTO `location` VALUES (1001, 60, 0);
INSERT INTO `location` VALUES (1002, 30, 1);
INSERT INTO `location` VALUES (1003, 20, 0);排序要求:
如果 welcome 为1   则按score + 50  来排
例查询两条数据   按  score DESC   
结果为
location_id为1000和1002的两条数据求助  感谢 !
mysql

解决方案 »

  1.   

    表述的不清楚!
    是不是要把 welcome 为1 的排在前面?select * from location order by welcome=1 desc, score DESC
      

  2.   


    版主  是这样的 
    我想将 welcome=1的 score + 50,再按score倒序来排。前提是不改变原表的值。
      

  3.   

    加50后为以下数据location_id score  welcome
    1000           100 1
    1001           60 0
    1002           80 1
    1003           20 0按 score  倒序取前两条数据:location_id score  welcome
    1000           100 1
    1002           80 1
      

  4.   

    相当于 将welcome为1的记录的score列加上50,然后再按score 来倒序。希望是一句sql查询出来,不影响原表的值。
      

  5.   

    SELECT location_id ,score+50 , welcome FROM location WHERE welcome=1 ORDER BY score DESC 
      

  6.   

    SELECT A.location, A.score, A.welcome
    FROM
    (SELECT location, ( CASE WHEN welcome = '1' THEN score + 50 ELSE score end ) AS score, welcome
    FROM location) A
    ORDER BY A.score  
    试试这样?我没测试哈
    大概意思就是用一个select嵌套,第一次先把表的结果和外加分数算出来,再对这个结果查询第二次
      

  7.   


    jordan102  谢谢回答。可我不是要只查 welcome = 1;而是welcome = 1的score 要加上50。想要实现的是 welcome=1 的记录权重会高一点。
      

  8.   


    deathoctopus  谢谢回答  查询的location可能写错了,我改成location_id可以执行得了;不过没反应。用的是phpmyadmin,怪了;第一次遇到执行没反应的。
      

  9.   

    你的数据量有多大?看看show processlist;这条语句是不是在执行中,嵌套比较慢
      

  10.   

    deathoctopus
    1w这样  还会继续增长;如果不行。唯有用张表专门记 +50 后的记录了。
      

  11.   

    这样写
    select location_id, if(welcome=1,score+50,score) as score, welcome from location order by score DESC
    Array
    (
        [0] => Array
            (
                [location_id] => 1000
                [score] => 100
                [welcome] => 1
            )    [1] => Array
            (
                [location_id] => 1002
                [score] => 80
                [welcome] => 1
            )    [2] => Array
            (
                [location_id] => 1001
                [score] => 60
                [welcome] => 0
            )    [3] => Array
            (
                [location_id] => 1003
                [score] => 20
                [welcome] => 0
            ))
    取几条,自己决定
      

  12.   

    谢谢版主  phpmyadmin执行过 1w条数据 0.003秒    速度还可以。