Mysql ode>?我想我说错了-一旦他申请,是的,事件应该不再对用户可见。但它仍然可见,计数仍然是4(就像它不会计算您自己的应用程序一样)。我在文本中编辑并澄清了一个简单的问题-您如何改进此查询以显示尚未应用的事件?因为现在如果我创建一个新事件,此事件不存在于ev

Mysql ode>?我想我说错了-一旦他申请,是的,事件应该不再对用户可见。但它仍然可见,计数仍然是4(就像它不会计算您自己的应用程序一样)。我在文本中编辑并澄清了一个简单的问题-您如何改进此查询以显示尚未应用的事件?因为现在如果我创建一个新事件,此事件不存在于ev,mysql,sql,Mysql,Sql,ode>?我想我说错了-一旦他申请,是的,事件应该不再对用户可见。但它仍然可见,计数仍然是4(就像它不会计算您自己的应用程序一样)。我在文本中编辑并澄清了一个简单的问题-您如何改进此查询以显示尚未应用的事件?因为现在如果我创建一个新事件,此事件不存在于event_applied表中,并且不会显示。我必须在EventApplied表中手动为该eventID插入一些内容,以便将其放入COUNT()中@Nikola:对于这个猜测,您只需要将第一个内部联接更改为左联接。这只是一个简单的问题-您如何改进此


ode>?我想我说错了-一旦他申请,是的,事件应该不再对用户可见。但它仍然可见,计数仍然是4(就像它不会计算您自己的应用程序一样)。我在文本中编辑并澄清了一个简单的问题-您如何改进此查询以显示尚未应用的事件?因为现在如果我创建一个新事件,此事件不存在于event_applied表中,并且不会显示。我必须在EventApplied表中手动为该eventID插入一些内容,以便将其放入COUNT()中@Nikola:对于这个猜测,您只需要将第一个
内部联接
更改为
左联接
。这只是一个简单的问题-您如何改进此查询以同时显示尚未应用的事件?因为现在如果我创建一个新事件,此事件不存在于event\u applied表中,并且不会显示。我必须在event applied表中手动为该eventID插入一些内容,以便将其放入COUNT()@Nikola:因此,您只需将第一个
内部联接
更改为
左联接
other_events (eventID, max_no_people, active)
event_applied (eventID, userID)
SELECT count(event_applied.eventid) AS no_applied, 
       e.eventID, e.max_no_people, e.active 
FROM other_events e 
     INNER JOIN 
     event_applied ON event_applied.eventID = e.eventID 
     LEFT JOIN 
     event_applied ea ON ea.eventID 
                      AND event_applied.userID = :userID 
WHERE ea.eventID IS NULL 
      AND e.active = 1
GROUP BY event_applied.eventID 
HAVING (no_applied < max_no_people)
eventID | max_no_people | active
--------|---------------|-------
   21   |       5       |   1
eventID | userID
--------|-------
123     |  10
123     |  11
123     |  12
123     |  13
123     |  14
no_applied | e.eventID | e.max_no_people | e.active
-----------|-----------|-----------------|---------
 **4**     |     123   |         5       |    1
SELECT count(event_applied.eventid) AS no_applied, e.eventID, e.max_no_people, e.active 
FROM other_events e 
INNER JOIN event_applied ON event_applied.eventID = e.eventID 
LEFT JOIN (SELECT * FROM event_applied WHERE event_applied.userID = :userID ) ea 
ON ea.eventID = e.eventID 
WHERE ea.eventID IS NULL AND e.active = 1
GROUP BY e.eventID, e.max_no_people, e.active
HAVING (no_applied < max_no_people)
SELECT 
    COUNT(*) AS no_applied, 
    e.eventID, 
    e.max_no_people, 
    e.active 
FROM 
    other_events e 
    INNER JOIN event_applied ea1 ON ea1.eventID = e.eventID 
    LEFT JOIN event_applied ea2 ON ea1.eventID = ea2.eventID AND ea2.userID = :userID
WHERE ea2.eventID IS NULL AND e.active = 1
GROUP BY e.eventID, e.max_no_people, e.active 
HAVING (no_applied < e.max_no_people)