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

我当然可以为此做三个查询并将它们组合在一起(在查询中或之后),但据我所知,将为每次搜索重新创建视图,因此效率很低。

4

2 回答 2

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)

等等

于 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 回答