ORDER BY не работает в MySQL 5.1 - PullRequest
1 голос
/ 29 июля 2010

У меня проблема с SQL-запросом в php:

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, ORDER BY работает!

Я проверил почти все руководства по командам ORDER BY, WHERE, LIKE, но результата нет.Никаких упоминаний о различиях версий и т. Д.

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Вы должны удалить кавычки из user в предложении ORDER BY. Именно поэтому 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)
1 голос
/ 29 июля 2010

Я думаю, что вам нужно:

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`;

Хотя я не понимаю ваше предложение WHERE.Он не фильтрует ни одно из полей.РЕДАКТИРОВАТЬ;некоторые из имен ваших столбцов (user, name, port и status) могут быть ключевыми словами MySQL.Попробуйте заключить их в серьезные акценты (`) (я также добавил их в свой пост).

...