注册 登录
编程论坛 MySQL论坛

[求助]怎样按汉字的拼音首字母排序?

蜂婆紫 发布于 2007-03-31 13:09, 4349 次点击

表的形式为:工程项目表J(JNO,JNAME,CITY)

其中的数据为:
jno jname city
J1 三建 北京
J2 一汽 长春
J3 弹簧厂 天津
J4 造船厂 天津
J5 机车厂 唐山
J6 无线电厂 常州
J7 半导体厂 南京

求所在城市按字母排序为第一的工程号。

这个应该怎样写查询语句?
请各位高手指点迷津。在下感激不尽ING。
9 回复
#2
lmhllr2007-04-02 15:31
这个不是直接按order by city asc就可以了吗?!我以为是要获得首字母呢
#3
蜂婆紫2007-04-10 00:41

我输入命令:
mysql> select jno from j order by city asc;

返回的结果是
+-----+
| jno |
+-----+
| J3 |
| J4 |
| J5 |
| J7 |
| J1 |
| J6 |
| J2 |
+-----+
其中,如果排列正确的话,J1应该排在最后的。可是它排前了,为什么?

#4
lmhllr2007-04-10 01:56
你这是按city排啊~

这样

select jno from j order by jno desc;
#5
蜂婆紫2007-04-10 16:38
这道题是 求所在城市按字母排序为第一的工程号
城市按字母排序应该是 北京,长春,常州,南京,天津,天津,唐山.
那么,返回的工程号应该是J1.

但是select jno from j order by jno desc;这句返回的只是jno 的排序结果,而且不是所在城市按字母排序.
#6
lmhllr2007-04-11 10:48
我晕了,列出查询字段就可以了啊,要多字段就用逗号分隔,基础

这个只返回一个,就是J1:
select jno from j order by city limit 1;

这个返回一个,工程号和城市对应:
select jno,city from j order by city limit 1;



郁闷!仿佛回到了学生时代做作业一样,这些东西很简单的,自己随便翻翻书就会了。闪了!
#7
蜂婆紫2007-04-12 00:16
谢谢你的解答,这个语句我也试过

输入:mysql> select jno,city from j order by city asc limit 1;

输出:
+-----+------+
| jno | city |
+-----+------+
| J3 | 天津 |
+-----+------+

输入:mysql> select jno,city from j order by city desc limit 1;

输出:
+-----+------+
| jno | city |
+-----+------+
| J2 | 长春 |
+-----+------+

输入:mysql> select jno,city from j order by city limit 1;

输出:
+-----+------+
| jno | city |
+-----+------+
| J3 | 天津 |
+-----+------+

始终得不到预期的答案

J1 北京





#8
lmhllr2007-04-12 01:53

难道是我人品问题??!!

这是我的结果:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\long>D:

D:\>CD MYSQL

D:\mysql>CD BIN

D:\mysql\bin>mysql -u root -p
Enter password: ***
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22 to server version: 5.0.16-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test
Database changed
mysql> select * from j;
+-----+----------+------+
| jno | jname | city |
+-----+----------+------+
| J1 | 三建 | 北京 |
| J2 | 一汽 | 长春 |
| J3 | 弹簧厂 | 天津 |
| J4 | 造船厂 | 天津 |
| J5 | 机车厂 | 唐山 |
| J6 | 无线电厂 | 常州 |
| J7 | 半导体厂 | 南京 |
+-----+----------+------+
7 rows in set (0.00 sec)

mysql> select jno,city from j order by city asc limit 1;
+-----+------+
| jno | city |
+-----+------+
| J1 | 北京 |
+-----+------+
1 row in set (0.00 sec)

mysql>

#9
lmhllr2007-04-12 01:56
然后顺便给你找错

因为 J3 天津天字的前面多了一个空格或者制表符之类的

这种错误很难找,你看看是不是这样的~~
#10
蜂婆紫2007-04-18 16:40

谢谢你一直的帮助,可能真的是我人品问题,或者是版本问题,我在我的电脑做了如下操作:
mysql> select *from j;
+-----+----------+------+
| JNO | JNAME | CITY |
+-----+----------+------+
| J1 | 三建 | 北京 |
| J2 | 一汽 | 长春 |
| J3 | 弹簧厂 | 天津 |
| J4 | 造船厂 | 天津 |
| J5 | 机车厂 | 唐山 |
| J6 | 无线电厂 | 常州 |
| J7 | 半导体厂 | 南京 |
+-----+----------+------+
7 rows in set (0.06 sec)

mysql> update j set city="天津" where jno="j3";
Query OK, 0 rows affected (0.02 sec)
Rows matched: 1 Changed: 0 Warnings: 0

mysql> update j set city="天津" where jno="j4";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0

mysql> select jno,city from j order by city asc limit 1;
+-----+------+
| jno | city |
+-----+------+
| J3 | 天津 |
+-----+------+
1 row in set (0.02 sec)

mysql> select jno,city from j order by city desc limit 1;
+-----+------+
| jno | city |
+-----+------+
| J2 | 长春 |
+-----+------+
1 row in set (0.02 sec)

它好像怎么查都不对。不过,真的很谢谢你。

1