Допустим, есть таблица «posts», которая содержит сообщения в блоге, и другую таблицу «избранное», которая связывает имя пользователя с сообщением. Многие пользователи могут любить сообщение, поэтому отношения - это одно сообщение для многих избранных.SQLAlchemy left join using subquery
Я пытаюсь понять синтаксис, чтобы добавлять сообщения в избранное, но я хочу только те избранные, где пользователь является текущим пользователем.
Я хочу, чтобы некоторые вещи, как:
current_user = 'testuser'
posts.query.outerjoin(favorites, and_(posts.post_id == favorites.post_id, favorites.username == current_user)).limit(10).all()
Это пойми меня очень близко, за исключением того, что кажется, что условие «favorites.username == current_user» в основном получение игнорировались. Это то, что я ищу в реальной SQL:
SELECT *
FROM posts p
LEFT JOIN (
SELECT * FROM favorites f WHERE f.user_id = 'testuser'
) ff ON ff.post_id = p.post_id
LIMIT 10
Стоит также отметить, что я определил отношения на постах, как:
favorites = db.relationship("favorites")
И я определил внешний ключ на избранные, как это :
post_id = db.Column(db.String(255), db.ForeignKey('posts.post_id'))
Как это сделать в SQLAlchemy?
В таблице фаворитов также содержат счет - например, 1-5 сколько пользователю нравится сообщение. Кроме того, когда я использую соединение, появляются только сообщения, которые были в порядке. Вместо этого я хотел бы, чтобы все сообщения возвращались, но мне нужны только те избранные, которые относятся к текущему пользователю. то есть, если сообщение не пользуется привилегией текущего пользователя, тогда оно должно появляться, но не содержит никаких избранных объектов. Если публикация помечена текущим пользователем и несколькими другими пользователями, должен показать только любимый пользователь. – mgoldwasser