mysql - ORDER BY 在 MySQL 5.1 中不起作用

标签 mysql sql-order-by where-clause sql-like

我在 php 中遇到 sql 查询问题:

select
    user, name, outlet, switch, port, vlan, mac, status
from access where 
    user like '%'
    and name like '%'
    and outlet like '%'
    and switch like '%'
    and port like '%'
    and vlan like '%'
    and mac like '%'
    and status like '%'
order by 'user';

当在 MySQL 客户端版本:5.1.36 上运行查询时,查询完全不起作用(ORDER BY 将不起作用),但是在 MySQL 客户端版本:4.1.13 上运行 SAME 查询时,ORDER BY 起作用!

几乎所有关于ORDER BY、WHERE、LIKE命令的手册我都查过了,但是没有结果。没有提及版本差异等。

最佳答案

您必须删除 ORDER BY 子句中 user 的引号。这就是导致 ORDER BY 无法按预期工作的原因,因为您可以在 ORDER BY 子句和 'user' 引号中的内容被视为表达式(常量)而不是列名。

测试用例(MySQL 5.1.45):

CREATE TABLE tb (id int);

INSERT INTO tb VALUES (5);
INSERT INTO tb VALUES (1);
INSERT INTO tb VALUES (4);
INSERT INTO tb VALUES (2);
INSERT INTO tb VALUES (3);

SELECT * FROM tb ORDER BY 'id';
+------+
| id   |
+------+
|    5 |
|    1 |
|    4 |
|    2 |
|    3 |
+------+
5 rows in set (0.00 sec)

SELECT * FROM tb ORDER BY id;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)

关于mysql - ORDER BY 在 MySQL 5.1 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3360169/

相关文章:

MySQL ORDER BY 第一个字段然后第二个字段

python - 如何将新的 ".where()"添加到现有的 peewee 查询中?

php - 使用 phinx 迁移库在非主键列上自动递增

mysql - 我可以将 .mysql 文件更改为 .sql 还是比这更复杂?

c# - 尝试使用 IQueryable 自定义 OrderBy - "Skip"方法错误

android - 在 SQLite where 子句中进行数学计算

PHP MySQL Where 子句不起作用

php - 如何在同一个 PHP 代码中执行两个查询?

PHP 带有复选框的多重编辑

mysql - 非平凡表达式的排序结果