0

我一直在努力寻找正确的方法来格式化我的 mysql 表达式以匹配相关的关键字表。

表设置如下:

photos: id,path,various exif data
photos_to_tags: photos_id,photos_tags_id
photo_tags: id,name

SQL如下:

SELECT DISTINCT (photos.path),photos.name, 
MATCH (photo_tags.name) AGAINST('+bamboo* +flooring* ') AS relevance 
FROM photo_tags 
LEFT JOIN photos_to_tags ON photo_tags_id = photo_tags.id 
LEFT JOIN photos ON photos.id = photos_id 
WHERE (MATCH (photo_tags.name) AGAINST('+bamboo* +flooring* ' IN BOOLEAN MODE)) 
  OR photo_tags.name = 'bamboo flooring' 
GROUP BY path 
ORDER BY relevance 
LIMIT 0,24;

除非确切的短语“竹地板”是一个标签,否则它不会返回结果。如果 'bamboo' 是一个标签,而 'flooring' 是一个标签,那么它不会返回结果。

更详细地描述该问题:这是针对承包商的网站。他有数百张工作照片。他可能有 30 张屋顶照片,一些屋顶照片可能是钢屋顶,其他可能是雪松摇,寿命等。

关键字标签在一个单独的表格中,它们可以用于列出所有屋顶的照片,或者可以使用搜索进一步隔离钢屋顶,或者可能是带有装饰细节的钢屋顶等。

可能还有另一种编写此查询的方法——我一直无法找到返回相关结果的好方法。例如,如果有人搜索终身屋顶,他们不想看到钢屋顶照片。

谢谢!

4

1 回答 1

0

“除非确切的短语“竹地板”是一个标签,否则它不会返回结果”-

是的,它不会返回,因为您在两者前面都写了“+”(这意味着它必须存在)。阅读 Mysql Devsite以了解它是如何工作的。

你也可以这样写:对于没有'bamboo'标签的照片将不会返回任何结果。

SELECT DISTINCT (photos.path),photos.name, FROM photo_tags 
INNER JOIN photos_to_tags ON photo_tags_id = photo_tags.id INNER JOIN 
photos ONphotos.id=photos_id WHERE photo_tags.name LIKE '%bamboo%' // 'bamboo' tag should be there or the search text..
GROUP BY path , photos.name 
LIMIT 0,24;
于 2014-10-13T16:03:15.827 回答