2010-11-01 52 views
1

我有以下幾點:修改MySQL Query以強制記錄先出現?

"SELECT * FROM pages WHERE parent=0 ORDER BY `sort` ASC" 

有一個在我與工作系統某處的一個錯誤是指一個頁面可以具有比主頁較低的排序值。我目前正在研究這個問題,同時我需要查詢來強制首頁出現。

可以修改此查詢,以便始終得到頁面的首個顯示爲id的頁面,然後按排序列對其餘頁面進行排序?

回答

1
SELECT * 
FROM pages 
ORDER BY 
     id = 1 DESC, sort 

如果你要一個LIMIT條款適用於該查詢,它可能是更好的把它一分爲二:

SELECT * 
FROM pages 
WHERE id = 1 
UNION ALL 
SELECT * 
FROM (
     SELECT * 
     FROM pages 
     WHERE parent = 0 
       AND id <> 1 
     ORDER BY 
       parent, sort 
     LIMIT 9 
     ) 

以便在(parent, sort)索引都可以使用。

+0

非常感謝,這完美地工作。 – JasonS 2010-11-01 17:32:24

0
SELECT * FROM pages WHERE parent=0 ORDER BY `id` ASC, `sort` ASC 
+0

如果'id'是'PRIMARY KEY',這與'ORDER BY id'相同。 – Quassnoi 2010-11-01 13:38:35

1
SELECT * FROM pages WHERE parent=0 ORDER BY IF(id = 1, -1, 0) ASC, id ASC