2

これは以前にさまざまな方法で尋ねられましたが、私が必要としているものにぴったり合うものを手に入れることができないようです.

ここでの目標は、選択されたタグに基づいて写真を返す検索クエリを作成することです。多くのタグをフィルターに同時に適用することができます。これには、すべてのタグが選択された写真のみがクエリで返されるようにする必要があります。基本的なキーワード検索を実行した後、結果を絞り込んでいる主要な Web ショップを考えてみてください。

表 1: 写真 ID|タイトル|説明|URL|作成済み

表 2: PhotosTagsXref ID|PhotoId|TagId

表 3: 写真タグ ID|タイトル|カテゴリ

私が持っているもの:

SELECT p.* FROM `PhotosTagsXref` AS pt
LEFT JOIN `Photos` AS p ON p.`ID` = pt.`PhotoId`
LEFT JOIN `PhotosTags` AS t ON pt.`TagId` = t.`ID`
WHERE p.`Description` LIKE "%test%" AND 
????
GROUP BY p.`ID`
ORDER BY p.`Created` DESC LIMIT 20

???? 私がたくさんのことを試したところですが、困惑しています。問題は、1 つまたは別のタグが付いた写真を含む結果セットを簡単に見つけることができることですが、2 つ、3 つ、または 4 つのタグを適用すると、データベース内のそれらすべてのタグのエントリを持つ写真のみを返す必要があります。これには結果セットの組み合わせが含まれると思いますが、100%確実ではありません。

例: 写真 1 タグ: 青、白、赤 写真 2 タグ: 青

「青」のタグが付いた写真を検索すると、両方の写真が返されます。「青」と「白」のタグが付いた写真を検索すると、写真 1 のみが返されます。

4

3 に答える 3

0

確かに少し醜い。しかし、PhotosTags.Category に「青」、「白」などがあると仮定して、この線に沿って何かを試してください。

SELECT p.* 
From `Photos` AS p
WHERE p.`Description` LIKE "%test%" AND 
  AND Exists
      ( Select 1 FROM `PhotosTagsXref` AS pt
        Inner JOIN `PhotosTags` AS t ON pt.`TagId` = t.`ID`
        Where pt.`PhotoId` = p.`ID`
          And t.Category = 'FirstCatToSearch'
      )   
  AND Exists
      ( Select 1 FROM `PhotosTagsXref` AS pt
        Inner JOIN `PhotosTags` AS t ON pt.`TagId` = t.`ID`
        Where pt.`PhotoId` = p.`ID`
          And t.Category = 'SecondCatToSearch'
      )   
  AND Exists
      ( ...
      )   
      ...
于 2013-10-09T15:54:41.487 に答える