我有6个领域一个数据库表,它包含有关餐馆的信息:
ID
名
型
category_1
category_2
category_3在PHP/MySQL的行排序符合某些标准的
有是三种“类型”餐厅:金,银和铜。在他们的所有三个分类页面(category_1,category_2和category_3)中都有金牌餐厅。银色餐厅的特色是其最上面两类(category_1和category_2)。青铜餐厅仅限于第一类(category_1)。在我的分类页面上,我需要显示这些分类中的所有餐馆,但要列出符合要求的餐馆(即,他们需要列在最上面)。我不知道如何用PHP/MySQL来做到这一点。我可以查询类别中的餐馆,但我怎么告诉它把特色餐厅放在顶部?这是我需要做的类别“墨西哥”:
显示所有墨西哥餐馆。推广在其任何分类领域中列有“墨西哥”的金牌餐厅,推广在前两类产品中含有“墨西哥”的银色餐厅,并在其顶级分类领域推广拥有“墨西哥”的青铜餐厅。
我一直在想很多不同的方式来做到这一点,无法弄清楚。
我不能凭良心直接解决您的问题,因为你的表结构是完全错误的。 每当你有像'category_1','category_2'等列,这表明该类别是一个重复组,并不属于该表。 正确的解决方案是通过将重复组“归一化”为单独的表来修复您的结构。 你应该有一个“类别”表,每个类别有1行。然后,你需要一个餐厅和类别之间的表来解决多对多的关系。 – gview
通常人们会将这张表命名为restaurantcategory。 restaurantcategory将在其中有类别和餐厅的外键,并且如果以某种任意方式保留1st,2nd 3rd的想法很重要,可能还需要一个“roworder”列。 – gview
您可以从正确的结构中获益: - 类别查询不需要查看所有3个类别列 - 您可以随时添加第4或第5类而不会中断您的应用程序 - 如果类别是字符串,存储一个数字键而不是几个大的字符串,你大大减少了表的大小 - 通常db提供“参照完整性”约束,这将确保例如,你不能输入一个餐厅的类别存在于类别表 - 并且......这只是关系数据库意图被设计的方式。 – gview