加强我的 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 。