你會更好歸該表,到一個事件表和event_volunteers表。
event(id, name, max_volunteers)
event_volunteers(event_id, user_id)
那麼你不必擔心哪個字段爲空或不是,你不限制自己的每個事件的兩名志願者 - 即更多的靈活性。
相反,您可以通過比較event_volunteers的計數和max_volunteers
字段來檢查活動是否對志願者開放。
select e.id, e.name
from event e
left join event_volunteers ev
on e.id = ev.event_id
group by e.id
having count(ev.event_id) < e.max_volunteers
隨着left join
,它將返回null
值的event_volunteers
所有字段是否有針對特定event
沒有志願者。 count()
忽略null
的值,所以即使有一行在那裏計數,計數將是0
。
您可以通過引入where
子句來限制此檢查特定事件。
而且要指派志願者參加活動,只需將其user_id
插入event_volunteers
表中。
然後,您可以通過執行上面的查詢把所有的志願者的名單,但沒有group by
或having clause
,如:
select e.id, e.name, ev.user_id
from event e
inner join event_volunteers ev
on e.id = ev.event_id
這將只顯示事件,其中有至少一個志願者(因爲inner join
)。如果您希望顯示所有活動,請與志願者(如果有)一起展示。將inner join
更改爲left join
,如果沒有該活動的志願者,您將在ev.user_id
中獲得null
值。
安置自己的預計結果表模式 –
事件表架構 ID NOT NULL AUTO_INCREMENT EVENT_NAME VARCHAR(50) USER_1 INT(11)NOT NULL user_2 INT(11)NOT NULL created_at DATETIME – user2011139
是..事件表模式 –