我有一张鸡尾酒食谱和其他东西的桌子。我还有一张表,上面显示了喜欢的食谱。我想查看最后一天提到的食谱,如果结果小于 1000,则用不在 FEED 表上的随机食谱填写剩余的 1000。
例子
饲料:食谱 1 今天(1 分钟前)喜欢(鸡尾酒),食谱 2 昨天喜欢(不是鸡尾酒),食谱 3 今天喜欢(1 小时前)(鸡尾酒),食谱 4 今天喜欢(3 分钟前)(不是鸡尾酒) .
配方表:不言自明
类别表:
recipe 1, cocktail
recipe 2, juice
recipe 3, cocktail
recipe 4 juice
recipe 3333 cocktail
recipe 4444 cocktail
recipe nnnn cocktail
我的视图需要显示:
食谱 1、食谱 4、食谱 3(按最近的顺序点赞)。然后填充剩余的 1000,从配方表中随机获取:配方 4444、配方 3333、配方 nnnn。
最终结果:配方 1、配方 4、配方 3、配方 4444、配方 3333、配方 nnnn
下面的代码尝试执行此操作,但顺序错误(顶部没有按顺序排列的配方 1、4、3。它们混合在一起......
CREATE
ALGORITHM = UNDEFINED
DEFINER = `XXXX`
SQL XXXX
VIEW `cocktails` AS
(select
`r`.`name` AS `name`,
`r`.`myId` AS `myId`
from
((`recipe` `r`
join `feed` `f` ON ((`r`.`myId` = `f`.`recipe_id`)))
join `category` `c` ON ((`r`.`myId` = `c`.`recipe_id`)))
where
(`c`.`name` like '%cocktails%')
group by `r`.`name`
order by (max(`f`.`timeStamp`) >= (now() - interval 1 day)) desc , (`r`.`myId` is not null) desc)
union
(select
`r`.`name` AS `name`,
`r`.`myId` AS `myId`
from
((`recipe` `r`
join `category` `c` ON (`r`.`myId` = `c`.`recipe_id`)))
where
(`c`.`name` like '%cocktails%')
)
limit 0,1000