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」がタグの場合、結果は返されません。

問題をさらに詳しく説明するための詳細: これは請負業者の Web サイト用です。彼は何百枚もの作品の写真を持っています。彼は 30 枚の屋根ふきの写真を持っているかもしれません。屋根ふきの写真のいくつかは鋼鉄の屋根かもしれませんし、他のものは杉の揺れ、寿命などかもしれません。

キーワード タグは別のテーブルにあり、屋根のすべての写真を一覧表示するために使用できます。または、検索を使用して、スチール屋根のみ、またはトリムの詳細を含むスチール屋根などをさらに分離するために使用できます。

このクエリを書く別の方法があるかもしれません.関連する結果を返す良い方法を見つけることができませんでした. たとえば、誰かがライフタイム ルーフを検索する場合、彼らはスチール ルーフの写真を見たくありません。

ありがとう!

4

1 に答える 1

0

「「竹の床」という正確なフレーズがタグでない限り、結果は返されません」-

ええ、両方の前に「+」(存在する必要があることを意味します)を書いたので、返されません。Mysql Devsiteを読ん で、それがどのように機能するかを確認してください。

次のように書くこともできます: 「竹」タグのない写真は結果を返しません。

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 に答える