2

我希望这个线程的标题是有意义的。

请看下面的截图。

在此处输入图像描述

上半部分显示了两个已注册培训的用户的数据库。

默认情况下,可容纳 45 个座位

  • userB注册后,还剩44个。

  • 然后userA注册,现在有43个席位。

到目前为止,一切都很好。

但请看一下该屏幕截图的下半部分。请注意,屏幕显示 43 个可用座位和 44 个可用座位。这让我们的用户非常困惑。我们怎样才能只显示最少的可用数字?换句话说,每次注册后,只显示代表剩余座位的数字。在上面的示例中,它将是 43。

下次另一个用户注册时,数字会减少 1 并变为 42,这就是我们希望根据用户注册该课程的位置和课程日期显示的数字。

下面是我正在使用的代码。

如何调整它以仅显示可用座位数中最小的最新数字?

<asp:SqlDataSource ID="sqlDataSourceloc" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    SelectCommand="SELECT locationId, Location FROM tblLocations order by location asc"></asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
 SelectCommand="select DISTINCT l.LocationId,c.courseId, c.coursename, (case when isnull(t.availableSeats,30) = 0 then 'Class is full' 
                else  str(isnull(t.availableSeats,30)) end) availableSeats,d.dateid,d.trainingDates, d.trainingtime, c.CourseDescription,i.instructorName, l.location,l.seating_capacity 
                from tblLocations l
                Inner Join tblCourses c on l.locationId = c.locationId
                left join tblTrainings t on l.locationId = t.LocationId and c.courseId = t.courseId
                Inner Join tblTrainingDates d on c.dateid=d.dateid 
                Inner Join tblCourseInstructor ic on c.courseId = ic.CourseId  
                Inner Join tblInstructors i on ic.instructorId = i.instructorId" 
      FilterExpression="LocationId = '{0}'" >
<FilterParameters>
 <asp:ControlParameter ControlID="ddlLocation" Name="LocationId" 
  PropertyName="SelectedValue" Type="Int32" />
 </FilterParameters>
</asp:SqlDataSource>
4

2 回答 2

1

当新用户注册课程时,您需要

UPDATE table_name
SET AvailableSeats = ...
WHERE TrainingID=... AND CourseId=...

而不是做一个INSERT.

应该只有一行具有一组唯一的(DateId、LocationId、CourseId)值。

于 2013-06-17T14:19:23.140 回答
1

您可以尝试使用子查询来计算行数并从默认的 Capacity_Seating 中减去:

select DISTINCT l.LocationId,
c.courseId, 
c.coursename, 
c.Capacity_Seating - (select count(*) 
      from tblTrainings t1
      where l.locationId = t1.LocationId and c.courseId = t1.courseId) as
availableSeats,
d.dateid,
d.trainingDates, 
d.trainingtime, 
c.CourseDescription,
i.instructorName, 
l.location,
l.seating_capacity 
                    from tblLocations l
                    Inner Join tblCourses c on l.locationId = c.locationId
                    left join tblTrainings t on l.locationId = t.LocationId and c.courseId = t.courseId
                    Inner Join tblTrainingDates d on c.dateid=d.dateid 
                    Inner Join tblCourseInstructor ic on c.courseId = ic.CourseId  
                    Inner Join tblInstructors i on ic.instructorId = i.instructorId
于 2013-06-17T14:34:03.180 回答