首页 > 解决方案 > 如何将条件应用于子查询(MySQL)

问题描述

碰巧的是,在我提出问题后,我找到了解决方案。这是我遇到的问题:

我的数据库表是:

具有以下字段的预订:id、event_id、...

带有此类字段的评论:id、booking_id、event_id

事件显然带有 ID 和其他字段。还有对这个话题不重要的城市

我有这样的工作要求:

SELECT
    bookings.id as 'booking id',
    bookings.name as 'client name',
    events.title as 'event title',
    cities.title as 'City',
FROM bookings 
    JOIN events ON events.id = bookings .event_id 
    JOIN cities on events.city_id = cities.id
WHERE bookings.status = "new"
and bookings.id not in (SELECT booking_id 
                        FROM comments 
                        WHERE booking_id <> 0 
                        and booking_id is not null
                        )

我想查看评论表中评论少于 5 条的此类活动的预订。我试图添加这个(到上面提到的查询):

SELECT
<...>
events.id as MY_VARIABLE 
<...>
WHERE
<...>
and (SELECT count(id) FROM comments WHERE comments.event_id = MY_VARIABLE and booking_id <> 0 and booking_id is not null) < 10

显然,这不起作用,我不知道我是否应该制作 python 脚本来存储每个事件的评论计数,然后使用它作为标准从我的第一个查询中排除/包含数据

请帮忙,MySQL中有足够简单的解决方案吗?如果需要,我可以提供更多信息或在评论中更清楚地说明这一点

标签: mysql

解决方案


我将此添加到 SELECT 字段:

events.id as A,
    (SELECT count(comments.event_id)
    FROM events LEFT JOIN comments ON events.id = comments.event_id
    WHERE events.id = A and booking_id <> 0 and booking_id is not null) as 'Comment count'

它工作得很好。我现在有了我需要的数据,可以按评论数过滤它


推荐阅读