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)