34. 例えばこんなSQLのクエリが
期待3 - クエリのシンプル化 - 2
// 「『自分が行ったカフェ』に行ったことのある人」が行ったことのある、か
つ、自分が行ったことのないカフェ ランキング トップ10
SELECT `cafes`.`id` , `cafes`.`name` , COUNT(
`favorites`.`cafe_id` ) AS `count`
FROM `favorites`
RIGHT JOIN `cafes` ON `favorites`.`cafe_id` =
`cafes`.`id`
WHERE `user_id`
IN (
// 「自分が行ったカフェ」に行った人(自分以外)
SELECT `user_id`
FROM `favorites`
WHERE `cafe_id`
IN (
// 自分が行ったカフェ
SELECT `cafe_id`
FROM `favorites`
WHERE `user_id` =[自分のユーザ ID]
AND `status` =[行った]
)
https://allabout-tech.hatenablog.com/entry/2017/03/02/094600
AND `user_id` !=[自分のユーザ ID]
)
AND `status` =[行った]
AND `cafe_id` NOT
IN (
// 自分が行ったカフェ をNOT
SELECT `cafe_id`
FROM `favorites`
WHERE `user_id` =[自分のユーザ ID]
AND `status` =[行った]
)
GROUP BY `favorites`.`cafe_id`
ORDER BY `count` DESC
LIMIT 10
35. この様にCyhperで書けるそうで
期待3 - クエリのシンプル化 - 3
MATCH
(u:User{user_id: [ユーザ
ID]})-[:VISITED]->(c:Cafe)<-[:VISITED]-(u2:User)-[:VISITED]->(c
2:Cafe)-[:IS_IN]->(z:Zone)
WHERE NOT
(u)-[:VISITED]->(c2)
RETURN c2.cafe_name, count(u2) as count, z.zone_name
ORDER BY count DESC
LIMIT 10
https://allabout-tech.hatenablog.com/entry/2017/03/02/094600