草庐IT

ActiveRecord

全部标签

mysql - 从孙表中检索记录

我的问题与Rails相关,但即使是通用的SQL答案也很有用。我正在处理四个表:categories、books、categories_books和recipes。类别有并属于许多书。书中有许多食谱。翻译成Rails的代码我有:classCategory我正在尝试检索属于给定类别的书籍中包含的所有食谱。我知道如何处理许多查询,但不知道如何处理单个查询。我会做很多查询:recipes=[]books=@category.booksbooks.eachdo|book|recipes我不喜欢它,因为它需要N+1次查询。我可能需要一个连接来同时完成这一切,但我不确定ActiveRecord或SQ

mysql - 优化 ActiveRecord 查询

我一直在努力优化我的Rails应用程序,但我遇到了一个特定的查询:defself.random_selection(n)items=scoped(:joins=>"JOIN(SELECTidFROM#{table_name}WHEREmedias_count>0ORDERBYRAND()LIMIT#{n.to_i})ASrandom_idsON#{table_name}.id=random_ids.id")items.eachdo|genre|genre.medias.sort!do|x,y|y.vote_totalx.vote_totalendenditemsend这个想法是它会选择

mysql - 获取所有关联记录都具有属性的记录

这是我的类(class):classProduct类别有一个visiblebool值。我需要在Product中创建一个范围,以便我可以获得所有类别都可见的产品(即:如果一个产品有10个类别,甚至一个类别都有visible设置为false,范围应丢弃该产品)。ActiveRecord调用和MySQL查询都是可接受的。编辑:我们有数十万种产品,我们需要将此操作委托(delegate)给数据库,因为我们必须进行分页,对这一系列产品的喜欢进行排序。 最佳答案 Product.where("idnotin(selectproduct_idfr

mysql - 如何创建由数据库表支持的 Rails 3 模型,而无需 ActiveRecord 动态生成其属性?

我正在尝试为第三方服务创建API,并且已获得访问包含我需要的所有数据的复制数据库的权限。不幸的是,在MySQL中使用哪些权限是有限制的,以免暴露专有数据库设计。数据库设置为将某些数据库表公开为View,并授予对这些View的SELECT权限。我有一些模型由不遵守典型Rails表命名约定的表支持,定义如下:classMyAPIModule::CityActiveModel尝试为模型动态构建属性的任何查询都会失败,示例:MyAPIModule::City.find(1)失败:Mysql2::Error:SHOWVIEWcommanddeniedtouser'theuser'@'thehos

php - yii2/mysql 中 now() 和 db\Expression 的奇怪行为

我无法让以下代码正常运行(删除过期记录)。简单测试代码:test_expire表定义:CREATETABLE`test_expire`(`id`int(11)NOTNULLAUTO_INCREMENT,`expire`timestampNOTNULL,PRIMARYKEY(`id`));代码:TestExpire::deleteAll();$record=newTestExpire();$record->expire=newExpression("NOW()+INTERVAL1MONTH");$record->save();$record=newTestExpire();$record

php - Yii 2 : virtual fields in ActiveRecords

我使用MySQL和Yii2。在数据库中存在表'Regions'withcolumn'coordinates'。此列的类型为点。在SQL中我可以这样写:"SELECTX(coordinates)asx,Y(coordinates)asy"和"INSERTINTORegionsSETcoordinates=PointFromText('POINT(".$x."".$y.")')".但我不知道如何制作ActiveRecord模型。我想要这个(数据库不变):$item=Regions::findOne(1);echo$item->x."".$item->y;$item->x=$new_x;$i

mysql - rails (ActiveRecord) : Last select overrides previous

我想加入两个选择:Place.select('name').select('city')#=>SELECT"places"."city"FROM"places"但它只选择city列。我认为每个其他选择都会覆盖前一个。是否可以连接多个选择?上面的代码只是基于我的实际问题的简单示例。诸如将所有内容都放在一个选择中的解决方案:Place.select('name,city)...对我没用,因为我在很多地方加入了很多次。提前致谢! 最佳答案 与阿瑞尔Arel可用于实现您的目标...p=Place.arel_tablearel_select=

mysql - Rails 和 ActiveRecord - 重构多个相同的 where 子句

我正在使用Rails5。我必须处理一个非常复杂的查询,其中包含多个相同的where子句:::AllocatedBudget.joins(:account_code,:budget,account_code:[:place],budget:[:fiscal_year,:budget_state]).where(immeuble:{id:place.id}).where(situation_budget:{codesituation:['A','V']}).where(plan_comptable:{supprime:'false'}).where(budget:{supprime:'fa

mysql - 内存中有大量 SQL 日志记录字符串导致内存泄漏

我的应用程序在Puma(2.4)集群模式下运行,有4个worker。最初,它们总共使用不到2GB的RAM,但不断增长,在运行20小时后最终占用7GB。通过使用ObjectSpace,我发现字符串对象的数量增加得非常快,每个worker中有大约30万个对象到4-5百万个对象。然后我使用以下脚本按前60个字符对这些字符串进行分组并执行计数:counts=Hash.new(0)ObjectSpace.each_objectdo|o|nextunless(o.class==String)counts[o[0,60]]+=1endcounts=counts.to_a.sort_by(&:last

php - Codeigniter Active Record 只选择第一条记录而不是最近的记录

我的问题很简单。我正在使用codeigniter事件记录,模型类所要做的就是从属于用户的表中选择最新的项目。functionget_progress($users_id){$query=$this->db->get('progress');$this->db->where('user_key',$users_id);$this->db->order_by("id","desc");$this->db->limit(1);return$query->row_array();}看似简单,但出于某种原因,它正在抓取与user_key匹配的最低ID。我尝试将where语句更改为$this->d