이 테이블에는 항목 (이 경우 숙박 시설 속성 및 데이터는 아래에 단순화되어 있음), 속성이 제공하는 편의 시설 및 항목 ID 목록 인 amenities_index가 있습니다 제공되는 각 어메니티에 대한 어메니티 ID. 최종 사용자는 원하는 수의 편의 시설을 선택할 수 있으며 원하는 결과와 일치하는 편의 시설 수의 순서대로 결과를 반환하고 싶습니다. 그래서, 그들이 3 가지 편의 시설을 검색한다면, 나는 모두 3을 제안하는 항목을 나열한 다음, 2, 1 및 마지막으로 나머지 항목을 제공하는 항목을 원합니다. 올바른 순서로 결과를 얻기 위해 노력하고 있다고 생각되는 쿼리가 있지만 일치 항목을 기반으로 한 포인트 값을 반환 할 수 있기를 기대하고 있으며 문제가 발생합니다. 더 복잡한 쿼리의 경우 SQL 기술이 약간 부족합니다. 여기두 번째 테이블의 포인트 순으로 MySQL 주문
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
그리고는 테이블과 같이 구성되어 있습니다 것입니다 : 여기
은 올바른 순서로 결과를 반환 내가 가지고있는 예제 쿼리입니다. 어떤 도움을 주셔서 감사합니다. 내가 것, 대부분의 데이터베이스에서SELECT i.*, ai.points
FROM items i join
(select ai.item_id, count(*) as points
from amenities_index ai
where amenity_id in (1, 2)
) ai
on ai.item_id = i.id
ORDER BY ai.points desc;
:
SELECT i.*,
(SELECT count(*) AS points
FROM `amenities_index` ai
WHERE amenity_id in (1, 2) AND
ai.item_id = i.id
) as points
FROM items i
ORDER BY points desc;
당신은 또한 집계와 join
쿼리로이 작업을 수행 할 수 있습니다
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
예상 결과 집합을 게시하십시오. –
Gordon Linoff가 내가 원하는 것을 정확하게 제공했습니다. – user2726918