9

次のデータを含むMySQLテーブルがあります(簡略化):

INSERT INTO `stores` (`storeId`, `name`, `country`) VALUES
(1, 'Foo', 'us'),
(2, 'Bar', 'jp'),
(3, 'Baz', 'us'),
(4, 'Foo2', 'se'),
(5, 'Baz2', 'jp'),
(6, 'Bar3', 'jp');

ここで、顧客の国で始まる店舗のページ番号付きリストを取得できるようにしたいと考えています。

たとえば、アメリカの顧客には次のリストが表示されます。

Foo
Baz
Bar
Foo2
Baz2
Bar3

私が現在使用している単純なソリューション(アメリカの顧客とページサイズ3の例):

(SELECT * FROM stores WHERE country = "us") UNION (SELECT * FROM stores WHERE country != "us") LIMIT 0,3

これを行うより良い方法はありますか?ORDER BY上部に特定の値を配置するように使用および指示できますか?

4

5 に答える 5

16

これを試して:

SELECT * FROM stores ORDER BY country = "us" DESC,  storeId
于 2009-07-03T12:11:56.573 に答える
5

検索対象の国を最初に取得し、残りをアルファベット順に取得するには:

SELECT * 
FROM   stores 
ORDER BY country = 'us' DESC, country ASC
于 2009-07-03T14:44:44.367 に答える
2

国の各値を大文字と小文字を使用して数値にリンクする必要があります。

select *
from stores
order by case when country = "us" then 1
              else 0
         end desc
于 2009-07-03T12:09:35.660 に答える
1

国コードと注文のテーブルを作成し、クエリで結合してから、国コードの順序で並べ替えます。

したがって、次のようなテーブルがあります

CountryOrder

Code  Ord
----  ---
us    1
jp    2
se    3

そして、次のようなコード:

SELECT s.*
FROM Stores s
INNER JOIN CountryOrder c
   ON c.Code = s.Country
ORDER BY c.Ord;
于 2009-07-03T12:10:50.617 に答える
1

IF トップ値を US 行に割り当てるために使用するのはどうですか。

select if(country_cd='us,'aaaUS',country_cd) sort_country_cd, country_cd from stores Order by sort_country_cd

これにより、 という疑似列が得られますsort_country_cd。ここで、「US」を「aaaUS」にマッピングできます。 JPに引き続きマッピングできますJP

これにより、US がソート リストの一番上に表示されます。

于 2009-07-03T12:11:25.653 に答える