PostgreSQL の知識を深めています。これが実際のクエリです。
SELECT *
FROM associates a
LEFT OUTER JOIN ip b
ON a.userID = b.userID AND b.iPAddress = '124.xxx.xxx.xxx'
LEFT OUTER JOIN browser c
ON a.userID = c.userID AND c.userAgent = 'Mozilla / whatever Gecko'
LEFT OUTER JOIN location d
ON a.userID = d.userID AND d.country = 'US'
LEFT OUTER JOIN session e
ON a.userID = e.userID AND e.lastAction >= now() - interval '24 hours'
WHERE a.extensionID = 'xxxxx'
LIMIT 1
これを実行すると、すべての条件が満たされていると仮定して、{'userid' => 12345, ... }
後で使用できるナイス ハッシュが返されます (たとえば、セッションが期限切れになった場合、新しいセッションを作成するために必要になります)。
ただし、不一致の場合 (たとえば、呼び出し元のユーザーの IP が変更された場合) は同じハッシュになりますが、データが失われ、さらに重要なことに、ハッシュは次で始まります。{'userid' => nil}
上記の userID は明らかに他のテーブルと照合するために使用されていますが、なぜそれが失われるのでしょうか? さらに重要なことに、それを保持する方法は?
それは理にかなっています。不一致がある場合、何も「選択」されていません。a.userID
どうにかオリジナルを保存する方法はありますか?
私はpg gem 経由でHeroku の PostgreSQL を使用していることに言及する必要があります。