У меня есть три таблицы базы данных:
История
- Идентификатор
- Заголовок
- Содержимое
Категория
StoryCategory
Примечание. История и категория имеют отношение «многие ко многим» (история может иметь несколько категорий, а категория может иметь несколько историй), поэтому я создал StoryCategory.Кроме того, история может не иметь категории.
У меня также есть веб-страница (я использую бритву):
<form action="" method="get">
<label for="keyword">Keyword:</label>
<input name="keyword" type="text" value="@Page.Keyword" />
<label for="category">Category:</label>
<select name="category">
<option value="">All</option>
@foreach(var category in Page.Categories)
{
<option value=@category.Id @(category.Id == Page.Category? "selected=selected" : "")>@category.Title</option>
}
</select>
<input type="submit" value="Search" />
</form>
Чтобы упростить эту страницу, пользователь может войтиключевое слово для поиска определенной истории, и оно также позволяет пользователю выбрать категорию, к которой принадлежит история.
Я не могу найти способ найти истории, прикрепленные к определенной категории.Вот мой первый код (ключевое слово не учитывается, чтобы сосредоточиться на категории):
select s.title --columns will be added here such as name of category/ies, author etc.
from story as s
left join --left join so the uncategorized stories will not be excluded
storyCategory as sc
on s.id = sc.storyId
where sc.categoryId = @selectedCategory --this line is removed when there is no category selected
Образцы данных:
Story
id title content 1 naruto... 2 отбеливателя ...
Категория
id title 1 фэнтези 2 действие 3 драма
StoryCategory
storyId categoryId 1 1 1 2 2 1
Проблема в том, что если выбранной категории нет и если в истории есть несколько категорий, она также будет появляться несколько раз:
naruto (fantasy)
naruto (action)
bleach (fantasy)
Я действительно знаю, что происходит, но я не могу придумать лучшего решения для решения проблемы.