Надеюсь, что название этой темы имеет смысл.Как показать только одну запись - запись с наименьшим значением?
Пожалуйста, взгляните на скриншот ниже.
Верхняя половина показывает дб с двумя пользователями, которые зарегистрировались для обучения.
По умолчанию, есть емкость 45 место
После USERB подпишется, есть 44 слева.
Затем пользовательA подписывается, теперь имеется 43 места.
Пока все хорошо.
Но, пожалуйста, взгляните на нижнюю половину этого снимка экрана. Обратите внимание, что на экране отображается 43 места, а также 44 места. Это очень смущает наших пользователей. Как мы можем просто показать наименее доступный номер? Другими словами, после каждой регистрации отобразите только номер, представляющий оставшееся место. В приведенном выше примере это будет 43.
В следующий раз, когда другой пользователь подписывается, число уменьшается на 1 и становится 42, и это номер, который мы хотели бы показать в том месте, где пользователь зарегистрировался для этого класса и на дату проведения занятий.
Ниже приведен код, который я использую.
Как я могу настроить его, чтобы показать только самое текущее число, которое является наименьшим из числа доступныхSeats?
<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>
Разве это не очень своеобразный дизайн базы данных? Почему вы хотите сохранить количество доступных мест на * каждом ряду * в таблице тренировок? Там будет только одна строка с правильным значением, остальные будут мусором ... – mortb
Похоже, вам нужно уникальное ограничение на (DateId, LocationId, CourseId) –
Я бы подумал, что какая-то таблица (возможно, tblCourses) будет иметь общее количество доступных мест для каждого курса. Затем вы вычитаете количество зарегистрированных участников (они кажутся рядами в таблице тренировок?) Из этого общего количества доступных мест, чтобы получить текущее количество доступных мест. – mortb