我有查询需要40秒才能执行,我想知道如何让它更快......
SELECT rp.`id` as rip,r.`id`,
rl.`id` as rlid, r.`number`, r.`type`,
a.`title` as atitle, a.`id` as aid, more,
more_valid
FROM
`R_l_p` rp INNER JOIN
`Rl` rl ON rp.`rl_id` = rl.`id` INNER JOIN
`R` r ON r.`id` = rl.`r_id` INNER JOIN
`A` a ON a.`id` = r.`a_id`
LEFT JOIN
(SELECT `type`, `v`, `r_id`, COUNT(*) AS more
FROM `R_l`
WHERE `type` = 'stream' AND `v` = 1
GROUP BY `r_id`) stm ON stm.`r_id` = r.`id`
LEFT JOIN
(SELECT `type`, `v`, `r_id`, COUNT(*) AS …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为频繁运行的查询(即有错误的用户)创建范围。问题是我必须加入用户表和帐户表,然后在帐户表上运行方法以找出哪个用户有错误。换句话说,我需要找到具有错误帐户的用户。我可以像这样在帐户模型上创建此范围:
scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}}
Run Code Online (Sandbox Code Playgroud)
问题是,我必须在Account上定义此范围,因为这样我就可以map(&:status)
在从联接返回的ActiveRecord :: Relation上运行。因此,我的问题是:是否可以在“联接”表上运行方法,以便在用户模型上定义此范围?
谢谢!
我试图使用左连接从两个不同的表中总计一个数量.无论第二个表是否匹配,我都需要返回所有行.
SELECT l.tender,
l.starting+SUM(t.amount) AS 'amount'
FROM label l
LEFT JOIN transfers t on l.tender=t.name
ORDER BY l.tender
Run Code Online (Sandbox Code Playgroud) 我有一个字符串数组的数组.
它看起来像这样:
big_array = Array.new
big_array[0] = ["aib","ulster","anglo","hsbc"]
big_array[1] = ["ulster","hdfc","citibank"]
big_array[2] = ["aib", "citibank"]
Run Code Online (Sandbox Code Playgroud)
现在,由此,我想创建另一个包含银行名称的数组.我知道如何做到这一点的唯一方法是.
big_array.join(" ").split(" ").uniq
Run Code Online (Sandbox Code Playgroud)
现在,这适用于少量数据.但是如果big_array的索引达到1000s那会怎么样呢.似乎不是最好的方法.有没有更好的方法来实现这个?
PS我刚刚给出了一个我正在尝试做的例子.不是实际的代码.只想要一个更优雅的解决方案.
我有这些模型:
老师
class Teacher < ActiveRecord::Base
has_many :days
end
Run Code Online (Sandbox Code Playgroud)
天
class Day < ActiveRecord::Base
belongs_to :teacher
end
Run Code Online (Sandbox Code Playgroud)
并运行这些查询:
active_teachers = Teacher.joins(:days).where("teacher.id" => found_teachers.pluck(:teacher_id).uniq, "days.day_name" => selected_day)
Run Code Online (Sandbox Code Playgroud)
查询(应该)的作用是:found_teachers
所有具有重复的教师的数组,删除双重性并仅选择那些在相应日期具有类的教师(例如selected_day
,包含字符串Monday
).
因为变量中的数据量active_teachers
是如此之大,以至于我无法手动记录记录(我不确定我是否正确地构建了这个查询,它确实完全符合我的要求),我试图找出它是怎么回事此查询从ActiveRecord转换为SQL.
通常我会在终端中看到Rails应用程序运行服务器的所有内容,但截至目前,我没有看到此查询说明.
所以问题是,我怎样才能看到ActiveRecord查询如何转换为SQL?
先感谢您.
我正在尝试在表格中列出一些数据.数据来自数据库,我的数据库中有3个表.
我试图在这样的SQL语句中加入这三个三个表:
SELECT * FROM cases
LEFT JOIN users ON cases.fk_supporter = users.user_id
LEFT JOIN users ON cases.fk_creator = users.user_id
Run Code Online (Sandbox Code Playgroud)
它fk_supporter
是用户的外键,因此是fk_creator
to,但不是同一个用户.怎么做到这一点?
我需要有关sql查询的帮助.
我有这两个表:
player_locations:
ID | playerid | location <- unqiue key
---|-----------------------
1 | 1 | DOWNTOWN
Run Code Online (Sandbox Code Playgroud)
和 users:
ID | playername | [..]
----|--------------------
1 | example1 | ...
Run Code Online (Sandbox Code Playgroud)
我需要一个选择,以获得users.playername
从player_locations.playerid
.我有独特的地理位置player_locations.playerid
.
伪查询:
SELECT playername
FROM users
WHERE id = player_locations.playerid
AND player_locations.location = "DOWNTOWN";
Run Code Online (Sandbox Code Playgroud)
输出应该是example1
.
我是PHP和MySQL的新手,需要帮助解决我面临的问题.我正在尝试创建一个比以下更清洁的表:
表格示例
项目|部分|数量
Item1 | 123 | 2
第1项| 124 | 2
第2项| 123 | 1
第2项| 125 | 3
我可以使用普通表执行此操作,但我可以设想数据库具有大量具有重复数据的重复行.例如,我多次使用Item1来识别每个部分.
我想知道是否有更简洁的方法将这些数据存储在我的数据库中?我将使用PHP将数据存储到MySQL中.我也希望使Item列唯一,但就目前而言,不能这样做.
我查看了序列化,连接以及数组,但我无法弄清楚如何使它完全适合所以我想我会问这里.最终结果将是PHP报告,其中说:
第1项使用以下部分
第123部分:数量2
第124部分:数量2
第2项使用以下部分
第123部分:数量1
第125部分:数量3
任何帮助将不胜感激.
因为我认为应该是一个简单的解决方案,我遇到了一个死胡同.基本上,我有:
List<Uint16> header = new List<UInt16>();
Run Code Online (Sandbox Code Playgroud)
然后我用数据填充它,但后来我需要将几个元素加入到Int32中,我不知道最好的方法是什么.是否有任何.NET调用可以将这两个连接到Uint32?
谢谢
我应该使用哪种方法?
这个
Select * from table1,table2 where table1.id=table2.id;
Run Code Online (Sandbox Code Playgroud)
要么
Select * from table1 inner join table2 on table1.id=table2.id;
Run Code Online (Sandbox Code Playgroud)
注意: Id是foriegn Key.