2

私の国テーブルには、rank_id と country_name という列があります。

今は名前順ですが、いくつかの特定の国をランキングの一番上に置き、残りは名前順に並べようとしています。

これが私のクエリです:

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

何か案は?

4

3 に答える 3

1

次のようなものを追加して、「ORDER BY」句を微調整できます。

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

"country_name='USA'" は、米国に対してのみ "true" (または 1) を返し、他のすべての国に対しては "false" (または 0) を返し、順序は降順であるため、米国が最初で、次にカナダが同じで、次にカナダが同じになります。他のすべての人が来るでしょう!

于 2012-11-22T21:57:26.950 に答える
1

rank_orderデフォルトが の列を追加し0、リストの一番上に表示したいいくつかの特定の国について、より大きな数値に変更するとします。

次に、このクエリを使用してデータを取得できます。

SELECT * FROM table_countries ORDER BY rank_order DESC, country_name

rank_orderランク順に並べられる行は、よりも高いため、常に最初に (降順で) 配置され0ます。残りは のアルファベット順に並べられcountry_nameます。

于 2012-11-22T22:05:19.650 に答える
0

これを実現する簡単な方法は、名前を使用して順序付けすることで設定された優先順位をオーバーライドできる数値display_order列を に含めることです。country_name

これにより、後でクエリを変更することなく、必要に応じて任意に国をリストの一番上に移動できます。

その後、次のようなことができます:

  SELECT *
  FROM country_name
  ORDER BY display_order ASC, name ASC;
于 2012-11-22T21:56:31.277 に答える