求mysql排序语句

y681000 2014-10-31 09:15:38

create table bm
(
zd1 varchar(10),
zd2 varchar(100),
zd3 varchar(100),
zdj1 varchar(10),
zdj2 varchar(10),
zdj3 varchar(10)
)


INSERT INTO bm (zd1,zd2,zd3,zdj1,zdj2,zdj3) VALUES ('不限','','','12.3','','')
INSERT INTO bm (zd1,zd2,zd3,zdj1,zdj2,zdj3) VALUES ('自定义','天津市、吉林省','南开区、通化市','','13','8.5')
INSERT INTO bm (zd1,zd2,zd3,zdj1,zdj2,zdj3) VALUES ('自定义','北京市、天津市','','','9','')
INSERT INTO bm (zd1,zd2,zd3,zdj1,zdj2,zdj3) VALUES ('自定义','北京市、天津市','崇文区、南开区','','2.7','11')
INSERT INTO bm (zd1,zd2,zd3,zdj1,zdj2,zdj3) VALUES ('自定义','北京市、天津市','大港区','','10.6','17')



(我下面的语句获取的是符合条件的值相加后倒序结果,不是我要的,我要的是符合条件的单一字段值倒序结果,并取得这个最大值)
要得到结果:




我尝试用这样的语句获取,但不是我想要的
SELECT zd1,zd2,zd3,zdj1,zdj2,zdj3,
(
IF(LOCATE('不限',zd1),zdj1,0) +
IF(LOCATE('北京市',zd2),zdj2,0) + IF(LOCATE('天津市',zd2),zdj2,0) +
IF(LOCATE('崇文区',zd3),zdj3,0) + IF(LOCATE('南开区',zd3),zdj3,0)
) AS score
FROM bm
WHERE (
(zd1 LIKE '%不限%') OR
(zd2 LIKE '%北京市%') OR (zd2 LIKE '%天津市%') OR
(zd3 LIKE '%崇文区%') OR (zd3 LIKE '%南开区%')
)
ORDER BY score DESC
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
y681000 2014-10-31
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
mysql> select * from bm;
+--------+----------------+----------------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 |
+--------+----------------+----------------+------+------+------+
| 不限   |                |                | 12.3 |      |      |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |
| 自定义 | 北京市、天津市 |                |      | 9    |      |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |
+--------+----------------+----------------+------+------+------+
5 rows in set (0.00 sec)

mysql>

mysql> select zd1, zd2 ,zd3 ,zdj1, zdj2, zdj3,GREATEST(zdj1+0, zdj2+0, zdj3+0) as k
    -> from bm
    -> order by 7 desc;
+--------+----------------+----------------+------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 | k    |
+--------+----------------+----------------+------+------+------+------+
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |   17 |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |   13 |
| 不限   |                |                | 12.3 |      |      | 12.3 |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |   11 |
| 自定义 | 北京市、天津市 |                |      | 9    |      |    9 |
+--------+----------------+----------------+------+------+------+------+
5 rows in set (0.00 sec)

mysql>
把相加前面的部分替换成if判断语句就可以了吧
y681000 2014-10-31
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
mysql> select * from bm;
+--------+----------------+----------------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 |
+--------+----------------+----------------+------+------+------+
| 不限   |                |                | 12.3 |      |      |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |
| 自定义 | 北京市、天津市 |                |      | 9    |      |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |
+--------+----------------+----------------+------+------+------+
5 rows in set (0.00 sec)

mysql>

mysql> select zd1, zd2 ,zd3 ,zdj1, zdj2, zdj3,GREATEST(zdj1+0, zdj2+0, zdj3+0) as k
    -> from bm
    -> order by 7 desc;
+--------+----------------+----------------+------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 | k    |
+--------+----------------+----------------+------+------+------+------+
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |   17 |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |   13 |
| 不限   |                |                | 12.3 |      |      | 12.3 |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |   11 |
| 自定义 | 北京市、天津市 |                |      | 9    |      |    9 |
+--------+----------------+----------------+------+------+------+------+
5 rows in set (0.00 sec)

mysql>
这样不管是否符合条件的都参与排序了,就像这个(大港区 17)并不在条件内也进行了排序 我上面的有IF(LOCATE('崇文区',zd3),zdj3,0)如果不符合就为0
ACMAIN_CHM 2014-10-31
  • 打赏
  • 举报
回复
mysql> select * from bm;
+--------+----------------+----------------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 |
+--------+----------------+----------------+------+------+------+
| 不限   |                |                | 12.3 |      |      |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |
| 自定义 | 北京市、天津市 |                |      | 9    |      |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |
+--------+----------------+----------------+------+------+------+
5 rows in set (0.00 sec)

mysql>

mysql> select zd1, zd2 ,zd3 ,zdj1, zdj2, zdj3,GREATEST(zdj1+0, zdj2+0, zdj3+0) as k
    -> from bm
    -> order by 7 desc;
+--------+----------------+----------------+------+------+------+------+
| zd1    | zd2            | zd3            | zdj1 | zdj2 | zdj3 | k    |
+--------+----------------+----------------+------+------+------+------+
| 自定义 | 北京市、天津市 | 大港区         |      | 10.6 | 17   |   17 |
| 自定义 | 天津市、吉林省 | 南开区、通化市 |      | 13   | 8.5  |   13 |
| 不限   |                |                | 12.3 |      |      | 12.3 |
| 自定义 | 北京市、天津市 | 崇文区、南开区 |      | 2.7  | 11   |   11 |
| 自定义 | 北京市、天津市 |                |      | 9    |      |    9 |
+--------+----------------+----------------+------+------+------+------+
5 rows in set (0.00 sec)

mysql>
y681000 2014-10-31
  • 打赏
  • 举报
回复
谢谢,我在线等
九月茅桃 2014-10-31
  • 打赏
  • 举报
回复
OK,我去看看。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧