这是我的数据库计划:
Restaurants -> id, title
Categories -> id, restaurant_id, type(enum: cafe, restaurant, fastfood, burger, chiness)
Reviews -> id, restaurant_id, bodyReview属于餐厅,属于多类别
我们如何查询属于一个类别的评论?
下面是当前的配置:
sql_query = select reviews.id as id, reviews.body as body, restaurants.url as url, restaurants.id as restaurant_id from reviews inner join restaurants on(restaurants.id = reviews.restaurant_id)
sql_attr_multi = uint category_id from query; SELECT restaurant_id, categories.id as category_id FROM categories问题在于sql_attr_multi --它用reviews.id代替了restaurant_id!它不知道restaurant_id在sql_attr_multi,它认为我们指的是reviews.id!
发布于 2021-04-01 16:53:56
首先,sql_attr_multi中的结果集中的第一列应该是主查询中的'document_id‘。在您的示例中,document_id是reviews.id,但似乎在MVA中使用restaruant_id。它不能匹配这样的任意属性。
所以实际上需要一些东西
sql_attr_multi = uint category_id from query; \
SELECT reviews.id, categories.id as category_id \
FROM categories \
INNER JOIN reviews ON(reviews.restaurant_id = categories.restaurant_id) \
ORDER BY reviews.id若要获得执行联接的审阅id,请执行以下操作。分拆成行,使它更容易阅读。已经发现最好通过document_id对行进行明确的排序。
但这仍然不能让你通过‘类型’,即‘咖啡馆’等查询,因为你的'categories.id‘似乎是一个独特的id每家餐厅。(每一家咖啡馆都会有不同的categories.id!)
因此,实际上,您似乎希望“类型”作为MVA值。MVAs是数字(不是字符串),但幸运的是,枚举很容易转换成整数!
sql_attr_multi = uint category_type from query; \
SELECT reviews.id, type+0 \
FROM categories \
INNER JOIN reviews ON(reviews.restaurant_id = categories.restaurant_id) \
ORDER BY reviews.idsql_attr_multi中的列名无关紧要,只使用第一列作为document_id,使用第二列作为MVA值。
THen知情咖啡厅(例如)是enum中的第一个值,它的1。(例如汉堡是4个)
SphinxQL> SELECT * FROM myindex WHERE MATCH('keyword') AND category_type = 1https://stackoverflow.com/questions/66873600
复制相似问题