2012-11-22 66 views
2

我的國家/地區表具有以下列:rank_id和country_name。通過mysql將特定選項放在頂部的PHP select下拉選項

現在它按名稱排序,但我試圖按照排名順序將一些特定國家列在列表頂部,然後通過名稱按照其他順序排列。

這裏是我的查詢:

foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row) 
$countries[] = $row; 

任何想法?

+0

'rand_id'是「排名順序」還是主鍵? – Andrew

+1

我假設他的意思是'排序'是'rand_id'列。我的意思是你應該有第三個名爲'rank_order'的列並按順序排列,然後按名稱排序。 – mousesports

回答

1

如果添加rank_order柱,以0默認,然後將其更改爲更高的號碼,你想在列表頂部的幾個特定的​​國家。

然後,您可以使用此查詢來獲取你的數據:

SELECT * FROM table_countries ORDER BY rank_order DESC, country_name 

行由等級進行排序總是先走(按降序排列),因爲他們的rank_order高於0。其餘的按字母順序排列country_name

+0

完美謝謝! – jonthoughtit

0

實現此目的的一種簡單方法是在country_name中包含數字display_order列,該列允許您通過使用名稱進行排序來覆蓋設置的優先順序。

這將允許您根據您的需要任意移動國家到列表頂部,而不必在以後更改查詢。

然後你可以只是這樣做:

SELECT * 
    FROM country_name 
    ORDER BY display_order ASC, name ASC; 
0

你可以調整你的 「ORDER BY」 子句通過添加類似:

ORDER BY country_name='USA' DESC, country_name='Canada' DESC, country_name ASC 

由於 「COUNTRY_NAME = 'USA'」 返回「真正的「(或1),而所有其他國家則爲」假「(或0),順序依次遞減,美國爲先,加拿大則爲相同,則所有其他國家都會來!

相關問題