私の国テーブルには、rank_id と country_name という列があります。
今は名前順ですが、いくつかの特定の国をランキングの一番上に置き、残りは名前順に並べようとしています。
これが私のクエリです:
foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row)
$countries[] = $row;
何か案は?
私の国テーブルには、rank_id と country_name という列があります。
今は名前順ですが、いくつかの特定の国をランキングの一番上に置き、残りは名前順に並べようとしています。
これが私のクエリです:
foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row)
$countries[] = $row;
何か案は?
次のようなものを追加して、「ORDER BY」句を微調整できます。
ORDER BY country_name='USA' DESC, country_name='Canada' DESC, country_name ASC
"country_name='USA'" は、米国に対してのみ "true" (または 1) を返し、他のすべての国に対しては "false" (または 0) を返し、順序は降順であるため、米国が最初で、次にカナダが同じで、次にカナダが同じになります。他のすべての人が来るでしょう!
rank_order
デフォルトが の列を追加し0
、リストの一番上に表示したいいくつかの特定の国について、より大きな数値に変更するとします。
次に、このクエリを使用してデータを取得できます。
SELECT * FROM table_countries ORDER BY rank_order DESC, country_name
rank_order
ランク順に並べられる行は、よりも高いため、常に最初に (降順で) 配置され0
ます。残りは のアルファベット順に並べられcountry_name
ます。
これを実現する簡単な方法は、名前を使用して順序付けすることで設定された優先順位をオーバーライドできる数値display_order
列を に含めることです。country_name
これにより、後でクエリを変更することなく、必要に応じて任意に国をリストの一番上に移動できます。
その後、次のようなことができます:
SELECT *
FROM country_name
ORDER BY display_order ASC, name ASC;