0

ビューに検索したいデータがあります。データにはさまざまなタイプ (列で定義) があり、タイプごとに異なる制限を定義したいと考えています。

my_view

id   |    type    |     content
--        ----          -------
1         'dog'        'Lorem ipsum dolor sit amet, consectetur...'
2         'cat'        'adipisicing elit, sed do eiusmod...'
3         'cat'        'tempor incididunt ut labore...'
4         'dog'        'et dolore magna aliqua...'

次の行に沿ったクエリが必要です。

SELECT * FROM `my_view` WHERE ... LIMIT [[ max of 2 dogs, 1 cat and 1 sheep]]

もちろん、これに対して 3 つのクエリを実行し、それらを (クエリ内またはその後で) 組み合わせることができますが、私の知る限り、検索ごとにビューが再作成されるため、非常に非効率的です。

4

2 に答える 2

2

すべてを1つで行うことはできません。

ユニオンを使用

(SELECT * 
FROM my_view
WHERE type='dog'
ORDER BY yyy
LIMIT 2)

UNION

(SELECT * 
FROM my_view
WHERE type='cat'
ORDER BY xxx
LIMIT 1)

于 2012-09-03T12:06:42.310 に答える
0

次のようにサブ選択を使用します。

SELECT * 
FROM dogs, cats, sheeps, animals 
WHERE 
dogs.dog_id = (select dogs.dog_id from dogs where dogs.fk_animal_id = animals.animal_id limit 2) AND 
cats.cat_id = (select cats.cat_id from catswhere cats.fk_animal_id = animals.animal_id limit 1) AND 
sheeps.sheep_id = (select sheeps.sheep_id from sheeps where sheeps.fk_animal_id = animals.animal_id limit 1) 
于 2017-01-05T14:13:09.177 に答える