我想要搜索的视图中有一些数据。数据有不同的类型(在列中定义),我想为每种类型定义不同的限制。
示例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]]
我当然可以为此做三个查询并将它们组合在一起(在查询中或之后),但据我所知,将为每次搜索重新创建视图,因此效率非常低
答案 0 :(得分: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)
等
答案 1 :(得分: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)