Mysql
在 MySQL 視圖上執行“ORDER BY CASE”查詢之後會破壞它
每當我創建一個 MySQL 視圖,然後執行一個使用 排序結果的查詢時
ORDER BY CASE WHEN (...)
,該視圖就會變得不可用。新創建的視圖工作正常,所有 SQL 都是正確的。
這是我嘗試從視圖中查看所有記錄時收到的錯誤消息(或者當我在 phpMyAdmin 中點擊“瀏覽”時):
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'THEN0 ELSE1 END LIMIT 0, 30' at line 1
這是範例架構:
CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title` varchar(256) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `comments` (`id`, `user_id`, `title`) VALUES (1, 1, 'user one comment 1'), (2, 1, 'user one comment 2'), (3, 2, 'user two comment 1'), (4, 2, 'user two comment 2'); CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(256) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `users` (`id`, `name`) VALUES (1, 'user1'), (2, 'user2');
範例視圖:
CREATE VIEW view_sample AS SELECT c.id AS comment_id, c.title AS comment_title, u.name AS user_name FROM comments c, users u WHERE c.user_id = u.id
此時,您可以驗證上面的視圖是否正常工作並顯示結果。
將破壞一切的範例查詢:
SELECT * FROM view_sample WHERE comment_title LIKE 'user one%' ORDER BY CASE WHEN comment_title LIKE 'user one%' THEN 1 ELSE 0 END, comment_title
上面的查詢會起作用,但你之後嘗試做的任何事情都會失敗。試試這個:
SELECT * FROM view_sample
我試過幾次,有不同的看法。
我究竟做錯了什麼?
- 語法錯誤:需要在 THEN 和 0 (eq. ELSE) 之間添加空格。
我在 SqlFiddle 上嘗試了您的架構/查詢:
MySql 5.5.32(在這裡顯示)
MySql 5.6.6 m9(在這裡顯示)
並一起工作。
請檢查您的 PhpMyAdmin 可能有問題