所以基本上我有两个表,包含URL和TAGS,通过连接表TAGS_URLS在两者之间具有has-and-belongs-to-many关系.
通过标记查找URL的简单查询将是:
SELECT urls.id FROM urls
INNER JOIN tags_urls ON urls.id=tags_urls.url_id
INNER JOIN tags ON tags_urls.tag_id=tags.id
WHERE tags.tag IN ("sample","tag","list");
Run Code Online (Sandbox Code Playgroud)
但是,我正在尝试恢复包含所有一组标记的所有URL的交集.即,只有包含标签"sample"和"tag"AND"list"的URL.
我有一个工作查询,但我无法在不到30秒的时间内执行查询.
SELECT a.id
FROM
(SELECT DISTINCT urls.id FROM urls
INNER JOIN tags_urls ON tags_urls.url_id=urls.id INNER JOIN tags ON tags.id=tags_urls.tag_id
WHERE tags.tag = 'sample') a
JOIN
(SELECT DISTINCT urls.id FROM urls
INNER JOIN tags_urls ON tags_urls.url_id=urls.id INNER JOIN tags ON tags.id=tags_urls.tag_id
WHERE tags.tag = 'list') b
ON a.id = b.id;
Run Code Online (Sandbox Code Playgroud)
结果集是正确的,但性能可怕.
我目前还在Redis数据库中将数据复制为存储在标记集中的URL ID列表,这样我就可以做到这样的事情并很快得到结果集.
SINTER "tag-sample" "tag-list"
Run Code Online (Sandbox Code Playgroud)
通过合理的努力,是否有可能通过SINTER将此任务的MySQL性能提升到Redis级别?
我创建了一个游戏,你可以移动一个矩形并从天空中躲避其他下降的矩形.虽然每次矩形相交都没有任何反应.
if(mSquare.intersect(jSquare)){
canvas.drawColor(Color.BLACK);
要么
collision = mSquare.intersect(jSquare);
if(collision==true){ canvas.drawColor(Color.RED);
} this always returns false no matter where the rectangles are.......
Run Code Online (Sandbox Code Playgroud) 我试图得到两个列表相交的"对立面":如:
let all = [1..5]
let mask = [2,3]
let res = ???
-- let res = all `intersect` mask <-- reverse/opposite ?
-- I want to get [1,4,5] ?
Run Code Online (Sandbox Code Playgroud) 我有两个数据帧.两者中的行名称都是日期.我想要做的是,我想在两个数据帧中选择所有公共行(具有相同日期)并创建仅具有这些公共行的新数据帧.
当然,各列将彼此相邻.
有人可以帮忙吗?
我试图基于多个条件上的两个data.frames的交集来填充二进制向量.
我有代码工作,但我觉得只是为了得到二进制矢量是内存过多.
当我将我的代码应用于我的完整数据(40毫米+行)时.我开始有记忆问题.
是否有更简单的方法来生成向量?
以下是一些样本数据(例如,子样本仅包括完整样本中的obs.):
ob1_1 <- as.data.frame(cbind(c(1999),c("111","222","666","777")),stringsAsFactors=FALSE)
ob2_1 <- as.data.frame(cbind(c(2000),c("111","333","555","777")),stringsAsFactors=FALSE)
ob3_1 <- as.data.frame(cbind(c(2001),c("111","222","333","777")),stringsAsFactors=FALSE)
ob4_1 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)
full_sample <- rbind(ob1_1,ob2_1,ob3_1,ob4_1)
colnames(full_sample) <- c("yr","ID")
ob1_2 <- as.data.frame(cbind(c(1999),c("111","222","777")),stringsAsFactors=FALSE)
ob2_2 <- as.data.frame(cbind(c(2000),c("333")),stringsAsFactors=FALSE)
ob3_2 <- as.data.frame(cbind(c(2001),c("888")),stringsAsFactors=FALSE)
ob4_2 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)
sub_sample <- rbind(ob1_2,ob2_2,ob3_2,ob4_2)
colnames(sub_sample) <- c("yr","ID")
Run Code Online (Sandbox Code Playgroud)
这是我的工作代码:
q_intersect <- ""
q_intersect <- paste(q_intersect , "select a.yr, a.ID ", sep=" ")
q_intersect <- paste(q_intersect , "from full_sample a ", sep=" ")
q_intersect <- paste(q_intersect , "intersect ", sep=" ")
q_intersect <- paste(q_intersect , "select b.yr, b.ID …Run Code Online (Sandbox Code Playgroud) 当元素是对象时,是否有更古老的方法从另一个列表中减去一个列表?我认为可能有一种方法可以使用减去,但无法弄明白.这就是我所拥有的:
class item1 {
int foo
int getFoo(){return foo}
public item1(id_in){ foo = id_in }
}
def list1 = [new item1(10),new item1(11),new item1(13)]
def list2 = [new item1(11),new item1(12),new item1(14)]
// list3 = list2 - list1
def list3 = list2.findAll{ !(it.foo in list1.collect{it.foo}) }
// works
assert list3.collect{it.foo} == [12,14]
Run Code Online (Sandbox Code Playgroud)
这真的很不错,但如果有更好的方法,我只是好奇. 这个问题非常相似,但是寻找交叉点(巧合的是,几小时前才发布),但我认为这些对象具有ID属性.这就是我使用我的foo属性的原因 - 我不希望解决方案需要一些与"id"相关的grails-like mojo(如果存在这样的东西)).
有没有办法使用交叉而不选择不同的值?有点像INTERSECT ALL.
例如,考虑表A和B.
A --> 1, 1, 1, 2, 3, 4
B --> 1, 1, 2
Run Code Online (Sandbox Code Playgroud)
会导致
Result --> 1, 1, 2
Run Code Online (Sandbox Code Playgroud)
编辑
我认为这个链接很好地解释了我想要的东西.这个其他链接也有助于理解这个问题.或者这个其他链接更好地解释事件.
编辑2
假设表格:
表A.
?????????????????????????????
? A ? B ? C ? D ? E ?
?????????????????????????????
? Car ? 10 ? 1 ? OK ? -1 ?
? Car ? 10 ? 1 ? OK ? -1 ?
? Car ? 10 ? 1 ? OK ? -1 …Run Code Online (Sandbox Code Playgroud) 我有一个名为admin的用户,该用户具有公司列表。我想返回拥有一个或多个相同公司的用户列表。我正在使用Linq使用此查询,但是我不确定为什么它不起作用。我不太了解.Any()的功能,但是如果我不包括它,则程序会出现语法错误。这是我的尝试:
public List<User> GetUsers(User admin)
{
return Users.Where(user=>user.Companys.Intersect(admin.Companys)).Any()).ToList();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在SpatialPolygonsDataFrame(信息)上组合1000x1000m正方形的SpatialPointsDataFrame(网格),以聚合每个网格正方形内点的所有信息。
我尝试了代码:
combined <- intersect(info, grid)
但是我发现这个错误:
Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) :
rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded
Run Code Online (Sandbox Code Playgroud)
是否还有其他方法可以执行我想要的操作或解决错误?