尝试构建一个Cypher查询,每个'漫画'返回一个条目。
基本结构如下:
copyOfRange
我想抓住3'随意'漫画并返回每种类型的漫画中的一个媒体。由于漫画可能有100个媒体类型的媒体,它有点关注。我可以将其分解为多个查询,但我相信Cypher可以通过自己的系统实现这一目标。
我的原始代码可以执行所需的操作,但如果有多个相同类型的媒体,则一个漫画可能会多次返回。
原始代码:
(Comic)<-[]-(Media)-[]->(MediaType)
这有时会回归:
MATCH (mt:MediaType{Name: {mediatype} })
<-[:Is_Media_Of]-(m:Media)-[:Is_Media_For]->(w:Webcomic)
WHERE w.ComicID <> toInt({comicid})
AND m.Status = 'Active'
RETURN m.URL as ImgURL,
w.Name as ComicName,
rand() as r
ORDER BY r ASC Limit toInt({count}) ",
["mediatype"=>$AdType,"count"=>$Count,"comicid"=>$ComicID])
我确定它非常直接,我错过了一些东西。非常感谢任何帮助。
布鲁诺的代码:
'comic1' 'img'
'comic2' 'img'
'comic1' 'img2'
'comic3' 'img2'
'comic4' 'img1'
'comic3' 'img5'
布鲁诺的代码结果:
MATCH (mt:MediaType{Name: {mediatype}})
<-[:Is_Media_Of]-(m:Media)-[:Is_Media_For]->
(w:Webcomic) WHERE w.ComicID <> toInt({comicid})
AND m.Status = 'Active'
WITH distinct m, w
RETURN m.URL as ImgURL, w.Name as ComicName, rand() as r
ORDER BY r ASC Limit toInt({count})
目前的结果:
答案 0 :(得分:1)
试一试:
MATCH (mt:MediaType{Name: {mediatype}})<-[:Is_Media_Of]-(m:Media)-[:Is_Media_For]->(w:Webcomic)
WHERE w.ComicID <> toInt({comicid})
AND m.Status = 'Active'
WITH distinct w, mt, collect(m) as ms
RETURN ms[0].URL as ImgURL, w.Name as ComicName, rand() as r
ORDER BY r ASC Limit toInt({count})
我基本上是通过漫画进行分组并将所有媒体收集到一个列表中。然后我将返回列表的第一个元素。