そのため、MySQL 3 テーブル、アイテム (この場合は宿泊施設であり、データは以下に単純化されています)、プロパティが提供する可能性のある設備、および提供される各設備の項目 ID と設備 ID のリストである_enquiry_index_があります。エンド ユーザーは必要なアメニティをいくつでも選択できます。探しているものに一致するアメニティの数の順に結果を返したいと考えています。したがって、ユーザーが 3 つの異なるアメニティを検索する場合、3 つすべてを提供するアイテム、次に 2 つ、1 つ、最後に残りのアイテムを提供するアイテムがリストに表示されます。結果を正しい順序で取得するために機能していると思われるクエリがありますが、一致に基づいてポイント値も返せることを望んでいましたが、そこで問題が発生しています。より複雑なクエリに関しては、SQL のスキルが少し不足しています。
正しい順序で結果を返すクエリの例を次に示します。
SELECT * FROM items
ORDER BY
(
SELECT count(*) AS points
FROM `amenities_index`
WHERE
(amenity_id = 1 || amenity_id = 2)
AND amenities_index.item_id = items.id
) DESC
そして、これがテーブルの構造です。どんな助けでも大歓迎です。
items table
id name
1 location 1
2 location 2
3 location 3
4 location 4
amenities table
id name
1 fireplace
2 television
3 handicapped accessible
4 kitchenette
5 phone
amenities_index
item_id amenity_id
1 2
1 3
1 5
2 1
2 2
2 6
3 2
3 3
3 4
3 5