Как ограничить вывод набора результатов SQL до 1 результата вместо каждого запрашиваемого результата? - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над веб-приложением, которое содержит функцию поиска, которая возвращает ресторан, когда пользователь отправляет запрос, соответствующий этому ресторану.

Например, если пользователь вводит «Пицца» и вводит «Виски», я хочу, чтобы результат вывел соответствующий ресторан ОДИН РАЗ.

Вместо этого точный запрос приводит к появлению названия ресторананесколько раз.

Таблицы:

Foodtbl Drinkstbl Restaurantstbl

Код SQL:

" SELECT r.restname, r.type, r.location, r.website, r.reviews, r.PageLink"
                                    + " FROM restaurants r, food f, drinks d"
                                    + " WHERE SOUNDEX(f.foodcategory) = SOUNDEX(?)"
                                    + " AND SOUNDEX(d.drinkvariety) = SOUNDEX(?)"
                                    + " AND r.restid = f.restid"
                                    + " AND r.restid = d.restid");

В то время как результат цикла:

<% while (restResults.next()) { %>
                                    <td><%= restResults.getString("restname") %></td>
                                    <td><%= restResults.getString("type") %></td>
                                    <td><%= restResults.getString("location") %></td>
                                    <td><a href="<%= restResults.getString("website") %>"</a>Go to Website</td> 
                                    <td><a href="<%= restResults.getString("reviews") %>"</a>Go to Reviews</td>
                                    <td><a href ="<%= restResults.getString("PageLink") %>"</a>More Info</td>

Это проблема с моим оператором SQL или проблема цикла?

Спасибо.

1 Ответ

0 голосов
/ 20 февраля 2019

Поскольку вы выбираете только поля из ресторанов и не используете агрегатные функции, вы можете добавить DISTINCT.
, чтобы возвращаемые записи были уникальными.

Кроме того, лучше использовать более поздний синтаксис JOIN вместо устаревшего синтаксиса запятой.

" SELECT DISTINCT r.restname, r.type, r.location, r.website, r.reviews, r.PageLink"
  + " FROM restaurants r"
  + " JOIN food f ON f.restid = r.restid"
  + " JOIN drinks d ON d.restid = r.restid"
  + " WHERE SOUNDEX(f.foodcategory) = SOUNDEX(?)"
  + "   AND SOUNDEX(d.drinkvariety) = SOUNDEX(?)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...