3

ページネーションを行おうとしているときに、この問題に遭遇しました。私のテーブル-

ID   CarBrand    Car Model
---------------------------
1    Alfa Romeo  Guilietta
2    Alfa Romeo  Mito

3    Audi        A3
4    Audi        R8
5    Audi        TT

6    Fiat        Punto
7    Fiat        Panda

8    Ford        Mondeo
9    Ford        Mustang

10   Nissan      Almera
11   Nissan      Note
12   Nissan      Qashqai

13   Toyota      Aygo
14   Toyota      Prius

15   Volkswagen  Beetle
16   Volkswagen  Golf
17   Volkswagen  Polo
18   Volkswagen  Up

2 つのグループで、次のようにデータが表示されます。

-Fiat  - Punto
         Panda

-Ford  - Mondeo
         Mustang

したがって、ブランドは 2 つですが、データベースの結果は 4 つです。ブランドのすべてのモデルを表示しながら、クエリ制限を設けて、結果を 2 つのブランドにオフセットすることは可能ですか?

わかりにくかったらすいません!

4

3 に答える 3

3

明らかです。これを試して:

select * from t t1
join (
  select distinct carBrand from t
  limit 2
) s on t1.carBrand = s.carBrand

limit 2ご希望の注文前にお申し込みください。

于 2012-04-09T22:44:27.180 に答える
1

制限を取得するには、limitキーワードを使用せずにカウントを課すことができます。

たとえば、テーブル定義が与えられた場合

create table cars (id int,
                   carBrand char(10),
                   carModel char(10));

これにより、上位 2 つの自動車ブランドのすべての自動車モデルが得られます。

select cars.carBrand, cars.carModel
from cars
where  ((select count(*) from 
           (select distinct carBrand from cars) as carBrands
        where carBrands.carBrand < cars.carBrand) < 2)
order by cars.carBrand, cars.carModel;

これにより、 をリストするだけのインライン テーブルが作成され、これがcarBrands車に結合されて、上位 2 つのブランドにあるすべての車のリストが取得されます。はcount(*) .... < 2制限を適用します。'Ford'たとえば、上記のデータで を考えてみましょう。'Ford'の場合、< 'Ford'アルファベット順に 3 つのブランドがあるため、count(*)上記 = 3 です。3 は 2 以上'Ford'であるため、出力には車は表示されません。

テスト データの出力は次のようになります。

CARBRAND    CARMODEL
Alfa Romeo  Guilietta
Alfa Romeo  Mito
Audi        A3
Audi        R8
Audi        TT

さて、あなたは 2 つのブランドをどのように選びたかったかを述べていませんでした.あなたの例ではフォードとフィアットを挙げただけですが.どうしてそれらを選んだのかわかりません. 順序付けにアルファベット順以外の基準が必要な場合、それは可能ですが、より困難です。

SQL Fiddle とこれらすべての結果: http://sqlfiddle.com/#!2/33a8f/3

于 2012-04-10T01:08:57.340 に答える
0

それはデータベースの設計の問題です。modelおそらく、データを(モデル名) とbrand(ブランド名)の 2 つのテーブルに分割する必要があります。次に、次のようなクエリを記述できます。

SELECT m.name, b.name
FROM model m
INNER JOIN brand b
WHERE b.id IN (
    SELECT id
    FROM brand
    ORDER BY name ASC
    LIMIT 2 OFFSET 0
)

私はコードをテストしませんでした。GROUP BY私の意見では必要ありません。

于 2012-04-09T22:42:42.840 に答える