2016-10-31 3 views
0

Firebase에서 두 테이블을 결합해야합니다. 지금, 아래와 같이 데이터 구조가 있습니다.Firebase의 복잡한 쿼리

사용자가 로그를 만들면 Firebase에서 고유 한 ID를 가져옵니다. 이 ID는 ID를 작성한 사용자 ([email protected])에 저장됩니다.

하지만 로그인 한 사용자에게만 표시하고 싶습니다. 어떻게해야합니까? 지금은 키만 가져올 수 있지만 duration 및 startDate와 같은 데이터가 필요합니다.

logs 
    -KVMbJKN1i2vAxzutiYq 
    duration: 14 
    startDate: 28/10/2016 

    -KVMbLL4i_9dwaRZ9REB 
    duration: 28 
    startDate: 01/09/2016 

    -KVMiLwoSY34TZpf8mST 
    duration: 14 
    startDate: 2/2/2016 

users 
    Edl7nDpJWIdNmDVUDn87p31d9mN2 
    email: [email protected] 
    firstName: test 
    imageUrl: URL 
    lastName: test 
    provider: Facebook 

    KX6DRd0k5fasEaqB8vJWiXkp69L2 
    email: [email protected] 
    firstName: test1 
    imageUrl: URL 
    lastName: test1 
    provider: Firebase 

    WRgxyjSpQlUPmeJwfF9I7PhpvHs1 
    email: [email protected] 
    firstName: test2 
    imageUrl: URL 
    lastName: test2 
    logs 
     -KVMbJKN1i2vAxzutiYq: true 
     -KVMbLL4i_9dwaRZ9REB: true 
     -KVMiLwoSY34TZpf8mST: true 
    provider: Firebase 
+0

당신이 원하는 것이 무엇인지 좀 더 명확히하십시오 .. – Dravidian

+0

만약 내가 [email protected]로 로그인했다면, 나는 3 개의 로그를 보여주고 싶습니다. @Dravidian – Grumme

답변

1

은 특정 노드의 원하는 위치로 쿼리의 기간의 startDate를 얻으려면 : -

FIRDatabase.database().reference().child("user/\(FIRAuth.auth()!.currentUser!.uid)/logs").observeSingleEvent(of: .value, with: {(userSnap) in 

if let SnapDict = userSnap.value as? [String:AnyObject]{ 

for each in SnapDict{ 

    FIRDatabase.database().reference().child("logs/\(each.key)").observeSingleEvent(of: .value , with : {(Snap) in 

    print(Snap.value) 

    }) 
    } 
    } 
}) 
+0

내 대답을 업데이트했습니다 – Dravidian

+0

감사합니다! 완벽하게 작동합니다 – Grumme

+0

날짜별로 로그를 어떻게 주문할 수 있습니까? 지금은 무작위로 나온 것처럼 보입니다. – Grumme

0

그냥 사용자가 소유하는 식별 각 로그 노드에 아이를 추가 그것. 따라서 각각 duration, startDate 및 uid를 갖습니다.

logs 
    -KVMbJKN1i2vAxzutiYq 
    duration: 14 
    startDate: 28/10/2016 
    uid: WRgxyjSpQlUPmeJwfF9I7PhpvHs1 

그런 식으로 로그 노드가 로그 노드를 소유하고 있고 users/logs 노드가 해당 사용자의 로그를 식별합니다.

거기에서 로그에 대한 uid = 로그인 된 uid는 스냅 샷에 필요한 로그 노드와 하위 데이터를 반환합니다.