我的应用程序允许用户匹配,并且我不希望他们在匹配结束后的间隔内匹配更多次。使用NOT IN和NULL处理查询
我在redis上存储(zadd)匹配和unix时间戳。
在我的Postgres的查询,所以我希望能够做到:
SELECT user_id FROM users WHERE user_id NOT IN %s
,这仅仅是子查询,并有在那里许多许多其他条件,但问题是,当Redis的返回一个空列表由于用户在该时间间隔内未处于活动状态,NOT IN()会返回错误。
处理它的最好方法是什么?用例和时间?此外,我想在默认情况放个假阴性的user_id列表redis的回报,但我不喜欢那么多这种破解
编辑: 我的查询的样本是:
UPDATE users SET status = %s WHERE user_id IN (SELECT user_id FROM users WHERE user_id NOT IN % LIMIT 1)
的查询工作正常,但今天我在子查询中添加了部分user_id NOT in %s
。我通过那里redis返回的元组(或更好的redis返回一个列表,我把它转换成一个元组)。它只包含像[1234,3456,678]这样的整数。它工作正常时,元组不是空的(至少一个元素中),但如果元组是空的,我得到这个错误:
psycopg2.ProgrammingError: ERROR: syntax error at or near ")"
LINE 1: ...ocked = 0 AND bot_lang = 'en' AND user_id NOT IN() ORDER BY...
事实上,我解决了在默认情况下此添加一个假user_ID的元组的内部,使得它永远不是空的,但我不喜欢这个黑客,我希望能找到一个更好的解决方案。
编辑您的问题并提供样本数据和期望结果以显示错误是什么。你以'%s'传递什么?什么是错误?涉及“NULL”的地方在哪里? –