是否有办法根据其他列自动查找列的产品。
我有一个名为posts
的数据库表发布表
如何实现这一点rank = affinity x weight x decay?
答案 0 :(得分:3)
如果您使用的是MySQL 5.7.6,那么您也可以使用viewPager.setOffscreenPageLimit(numberOfPages);
从docs(您必须向下滚动到"创建表格和生成的列")
从MySQL 5.7.6开始,CREATE TABLE支持规范 生成的列。
生成的列可以是
或
示例:
GENERATED COLUMNS
或
-- calculated on-the-fly when reading:
create table post (
id int,
user_id varchar(20),
affinity int,
weight int,
decay int,
RANK int GENERATED ALWAYS AS (affinity*weight*decay) VIRTUAL
);
答案 1 :(得分:2)
MySQL中最简单的方法可能是定义一个进行计算的视图:
create view v_t as
select t.*, (affinity*weight*decay) as rank
from t;
然后,您可以在代码中使用视图而不是表格,值将在那里。
答案 2 :(得分:0)
您提出的计算存在内在问题(可能,或者至少这是我的理解),因为affinity
,weight
和decay
的值不同,您可能最终会遇到问题具有相同的结果,例如3 X 4 X 5 = 5 X 3 X 4.因此,如果您尝试查找等级为60的记录,您将获得至少两个(使用上面的示例)。这是你想要的?如果不是,那么生成组合排名会更加清晰,类似于aaa-bbb-ccc
,其中aaa
对应于affinity
(范围000-999),以及等等。
然而,不建议使用上面提出的视图解决方案,因为每次查询时都会触发计算。
另一种选择是在这三个字段上设置触发器,这样,只要任何字段的值发生变化,就会重新计算排名字段并将其部署在相应的列中。