NOTLIKEステートメントに問題があります。タグマップとして2つのSQLテーブルを設定しています。最初のテーブルは検索名に従ってtag_idを検索し、2番目のテーブルは見つかったtag_idに基づいてresource_idを検索します。以下のNOTLIKEステートメントを実行すると、次の結果が得られます:resource_id=1。
マップテーブルにタグを付ける
tag_id name
1 meat
2 vegetarian
resource_id tag_id
1 1
1 2
クエリ
SELECT
f.id, f.food_name, tm.resource_id, tm.tag_id, t.name
FROM
tag as t, tagmap as tm JOIN item as f ON
(
f.id = tm.resource_id AND tm.tag_id IN
(
SELECT
t.tag_id
FROM
tag as t
WHERE
t.name NOT LIKE '%meat%'
)
)
GROUP by f.id
このクエリで必要なのは、タグ名が「meat」のresource_idが見つかった場合に、このresource_idを返さないようにすることだけです。
説明がはっきりしない場合はお知らせください。