我正在使用一个包含搜索功能的Web应用程序,当用户提交与该餐厅匹配的查询时,该功能会返回该餐厅。
例如,如果用户输入“ Pizza”并输入“ Whiskey”,则我希望结果输出匹配的餐厅一次。
相反,此确切的查询导致餐厅名称出现多次。
表格:
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语句问题还是循环问题?
谢谢。
答案 0 :(得分:0)
由于您仅从餐厅中选择字段,并且不使用聚合函数,因此可以添加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(?)");