2012-09-03 209 views
0

我有一些數據在我想要搜索的視圖中。數據具有不同的類型(在列中定義),我想爲每種類型定義不同的限制。MySQL限制與where子句

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]] 

我當然可以做三個查詢,這和貼合在一起(無論是在查詢或之後) ,但據我所知,該視圖將爲每個搜索重新創建,因此效率非常低。

回答

2

你不能一個人做。

使用聯盟

(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) 

+0

你知道,如果視野將每個UNION重新創建? –

+0

@JamieG嗯,我不知道這個「視圖的創作」來自哪裏:視圖只是準備好的陳述。但無論如何,據我所知,沒有其他辦法可以得到你想要的東西...... –

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)