我有一个包含6个字段的数据库表,其中包含有关餐馆的信息:
id
名字
类型
category_1
category_2
category_3
有三种“类型”的餐厅:金色,白银色和青铜色。黄金餐厅在所有3个分类页面(category_1,category_2和category_3)上都有特色。银色餐厅在他们的前两个类别(category_1和category_2)上都有特色。青铜餐厅只在他们的第一类(category_1)上有特色。在我的类别页面上,我需要显示这些类别中的所有餐厅,但功能谁的餐厅有资格成为特色(即,他们需要在顶部列出)。我不确定如何使用PHP / MySQL来做到这一点。我可以很好地查询分类中的餐厅,但我如何告诉它将特色餐厅放在顶部?这就是我需要在“墨西哥”类别上做的事情:
显示所有墨西哥餐厅。推广在其任何类别字段中列出“墨西哥”的金牌餐厅,推广在其前两个类别字段中列出“墨西哥”的银牌餐厅,并推广在其顶级类别字段中列出“墨西哥”的青铜餐厅。
我一直在想许多不同的方法来做这件事,但还是想不出来。
发布于 2011-08-26 09:06:49
这应该可以帮助您解决现有的表结构问题。
我假设这个查询中的type包含bronze、silver和gold。
SELECT * FROM restaurants
WHERE category_1 = 'Mexican'
OR (category_2 = 'Mexican' AND type in ('silver','gold'))
OR (category_3 = 'Mexican' AND type = 'gold')
ORDER BY Field(type,'gold','silver','bronze'), name asc;发布于 2011-08-26 09:07:17
这是一个概念问题。您不应该有三个"category_X“列。相反,您应该有一个单独的表(例如restaurant_category)。基本上,您的表结构将如下所示:
restaurant (restaurant_id, name, type)
restaurant_category (restaurant_id, category_name)您甚至可以(也应该)通过创建一个category表和一个type表来规范化您的表,但是对于这个问题,我只是假设您不会这样做。然后,您在restaurant_category中为一家青铜餐厅添加了一行,为一家银牌餐厅添加了两行,为一款金牌餐厅添加了三行,您可以使用如下查询:
SELECT name
FROM restaurant
INNER JOIN restaurant_category
USING (restaurant_id)
WHERE category_name = 'Mexican'
ORDER BY FIELD(type, 'Gold', 'Silver', 'Bronze'); -- if you had normalized
-- you'd use a column like
-- type_order to order by发布于 2011-08-26 09:07:02
通过以下方式将此添加到您的订单中:
ORDER BY FIELD(type,"gold","silver","bronze")https://stackoverflow.com/questions/7198862
复制相似问题