我试图删除发生的重复数据:
活动与大厅
宴会桌
活动与大厅
麦克风支架
联课
交通锥
景观
花瓶
体育
球
但我想要的输出是:
活动与大厅
宴会桌
麦克风支架
联课
交通锥
景观
花瓶
体育
球
以下是代码:
<select name="s_item" style="width:173px;" onChange="Retrieve(this.value)" required>
<option value="">Select Item</option>
<%
SET rsItem = Server.CreateObject("ADODB.Recordset")
rsItem.Open "SELECT * FROM inv_general",conn
IF rsItem.EOF <> true then
DO WHILE rsItem.EOF <> true
SET rsCat = Server.CreateObject("ADODB.Recordset")
rsCat.Open "SELECT * FROM inv_category WHERE inv_cat_id='"&rsItem("inv_cat_id")&"'",conn
%>
<optgroup label="<%=rsCat("inv_cat_name")%>">
<option value="<%=rsItem("inv_item_id")%>"<%IF request("item")=rsItem("inv_item_id") THEN%>selected<%END IF%>><%=rsItem("inv_item_name")%></option>
</optgroup>
<%
rsItem.MOVENEXT
LOOP
END IF %>
</select>
您没有提到正在使用哪些dbms,但请尝试以下代码,让我们看看它适合您。
<select name="s_item" style="width:173px;" onChange="Retrieve(this.value)" required>
<option value="">Select Item</option>
<%
Dim parentName
parentName = ""
SET rsItem = Server.CreateObject("ADODB.Recordset")
rsItem.Open "SELECT c.inv_cat_name, i.inv_item_id, i.inv_item_name FROM inv_general i INNER JOIN inv_category c on i.inv_cat_id = c.inv_cat_id order by c.inv_cat_name, i.inv_item_name",conn
IF rsItem.EOF <> true then
DO WHILE rsItem.EOF <> true
If parentName <> rsCat("inv_cat_name") Then
parentName = rsCat("inv_cat_name")
%>
<optgroup label="<%=parentName%>">
<%
End If
%>
<option value="<%=rsItem("inv_item_id")%>"<%IF request("item")=rsItem("inv_item_id") THEN%>selected<%END IF%>><%=rsItem("inv_item_name")%></option>
</optgroup>
<%
rsItem.MOVENEXT
LOOP
END IF %>
</select>
如果像这样联接项目表和类别表,则无需执行额外的 SQL 语句:
SELECT c.inv_cat_name, i.inv_item_id, inv_item_name FROM inv_general i INNER JOIN inv_category c on i.inv_cat_id = c.inv_cat_id order by c.inv_cat_name, inv_item_name
然后,您需要将类别名称存储在parentName
的临时变量中。由于您按类别名称和项目名称对结果进行排序,因此使用
If parentName <> rsCat("inv_cat_name") Then
End If
块,你基本上避免重复的类别名称。代码可能有语法错误,我现在没有机会测试它。干杯!