1

私は次の表を持っています

---------------------------------------
id,     type,     keyword,     default
---------------------------------------
1,      1,        mcdonalds,       1
2       1,        food,            0
3,      1,        drinks,          0
4,      2,        vending machine, 1
5,      2,        drinks,          0
6,      3,        station,         1
7,      3,        travel,          0
8       3,        train,           0

この背後にあるアイデアは、キーワードの「一意の」タイプ (デフォルトの行) を返す検索クエリが必要であるため、マクドナルドを検索すると最初の行が取得されますが、食べ物や飲み物を検索すると最初の行も取得されるということです。 .

サブセレクトを使用してこれを行いました。

SELECT type, keyword FROM keywords WHERE type IN (SELECT DISTINCT type FROM keywords WHERE keyword like '%?%') AND `default`=1
;

これは魅力のように機能しますが、「飲み物と食べ物」など、複数のキーワードを指定できるようにしたいと考えています。

SELECT type, keyword FROM keywords WHERE type IN (SELECT DISTINCT type FROM keywords WHERE keyword like '%?%' OR keyword like'%?%') AND `default`=1
;

しかし、この場合、「食べ物と飲み物」を検索すると、「自動販売機」と「マクドナルド」の両方が表示されます。ただし、自動販売機には関連キーワード「飲み物」しかありません (食べ物は提供していません)。

OR の代わりに「AND」を実行すると、まったく結果が得られません (1 つの行に両方の値を同時に含めることはできないため)。

これを解決する方法について何か提案はありますか?

4

3 に答える 3