我有包含文章和用户的表,它们都有到第三个表的多对多映射 - 读取。
我在这里要做的是获取特定用户的所有未读文章(user_id
不在表 reads
中)。
我的查询是获取所有文章,但已阅读的文章已标记,如果可以的话,我可以过滤掉它们(user_id 字段包含相关用户的 ID)。
我有一个这样的 SQL 查询:
SELECT articles.id, reads.user_id
FROM articles
LEFT JOIN
reads
ON articles.id = reads.article_id AND reads.user_id = 9
ORDER BY articles.last_update DESC LIMIT 5;
产生以下结果:
articles.id | reads.user_id
-------------------+-----------------
57125839 | 9
57065456 |
56945065 |
56945066 |
56763090 |
(5 rows)
这很好。这就是我想要的。
我想使用我的文章模型在 Catalyst 中获得相同的结果,但我找不到任何选项来向 JOIN 子句添加条件。
你知道如何将 AND X = Y
添加到 DBIx JOIN 吗?
我知道这可以通过自定义结果源和虚拟 View 来完成,但我有一些其他查询可以从中受益,我想避免为每个查询创建虚拟 View 。
谢谢, 粤语
最佳答案
我什至不知道什么是 Catalyst
但我可以破解 SQL 查询:
select articles.id, reads.user_id
from
articles
left join
(
select *
from reads
where user_id = 9
) reads on articles.id = reads.article_id
order by articles.last_update desc
limit 5;
关于perl - JOIN 中的附加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933997/