我确信我是以错误的方式看待这个。
我想在数据库中保存一个餐馆菜单并显示它。例如,我创建了一个类似于下面的表:
列:
Food_Item | Food_Description | Food_Price | Food_CAT.
数据:
沙拉|清爽的沙拉| 5.25 |首先
虾鸡尾酒|可爱的虾| 4.75 |首先
番茄汤|番茄奶油| 4.50 |汤类
牛排|可爱的臀部牛排| 10.95 |电源
鱼与鱼芯片| Classc菜| 8.75 |电源
我想要实现的是菜单布局,其中food_CAT充当标题,然后在下面显示不同的菜肴,例如:
起动
沙拉 - 5.25
虾鸡尾酒 - 4.75
汤类
番茄汤 - 4.50
电源
牛排 - 10.95
鱼与鱼芯片
等。
有没有一种简单的方法可以做到这一点,所以我没有在每个菜上面的food_cat标题,只有第一个?我以为我可以使用DISTINCT,但是通过阅读其他帖子,我知道DISTINCT一栏几乎是不可能的。
希望有人可以提供帮助。
此致 奥利弗
答案 0 :(得分:1)
执行此操作的方法是在显示中,而不是在查询中。
在查询的Food_CAT
语句中包含SELECT
。它将包含在检索到的每条记录中。
使用ORDER BY
先按Food_CAT
对项目进行排序,然后按所需的列排序,可能是Food_Item
或Food_Description
。
然后,无论您选择显示结果的任何方法,都会遍历查询,每次该字段的值发生更改时,添加仅显示Food_CAT
的行。显示该标题记录后,显示与Food_CAT
匹配的记录,依此类推。
答案 1 :(得分:1)
我的印象是你在SELECT语句中询问如何执行此操作,而不是使用游标。如果情况并非如此,那么使用游标可以更好地回答这些问题,这些游标可以消除我答案中的一些漂浮物。还有一些特定于报告工具的答案远比这两者都要好(但是你没有提到使用报告工具)。
关键是你有两个想要混合的数据集:
组合它们的第一步是使数据集匹配,因此您需要将项目和价格合并为一个字符串。接下来是要包含要排序的数据,即food_cat,以及将标题排序到food_cat顶部的项目,以及下面的项目/价格字符串。你最终得到的结果如下:
select distinct food_cat as display,
food_cat,
1 as sort_order
from temp_food
union
select food_item + ' - ' + cast (food_price as varchar),
food_cat,
2
from temp_food
order by food_cat, sort_order
当然,您不希望显示此数据集中的额外列,但这是您必须在另一个级别处理的内容。
祝你好运,特里。
答案 2 :(得分:0)
SQL在单个结果集中混合和匹配不同类型的行不是很擅长,即需要过于复杂的查询才能在单个结果集中返回数据,如下所示:
Starters | n/a
Salad | 5.25
Prawn Cocktail | 4.75
Soups | n/a
Tomato Soup | 4.50
Mains | n/a
Steak | 10.95
Fish & Chips | 8.75
最好使用JOIN水平链接数据,然后在客户端应用程序中进行一些处理,以便在菜单结构中显示数据。
SELECT Food_CAT, Food_Item, Food_Price FROM xx ORDER BY Food_CAT
然后在客户端应用程序中循环结果集,如下所示:
$foodtype = '' // a variable to store which category of food you're currently on
FOR EACH row in myresults:
IF myresults.Food_CAT <> $foodtype // another item in the existing category
PRINT myresults.Food_Item + myresults.Food_Price
ELSE // new category
$foodtype = myresults.Food_CAT
PRINT blankline
PRINT myresults.Food_CAT
PRINT myresults.Food_Item + myresults.Food_Price