Tôi đang tạo hệ thống bộ nhớ cache trong trang web. Tôi muốn tạo một hệ thống xếp hạng trang đơn giản cùng với đầu ra. Vấn đề là, tôi muốn hiển thị recordset với điểm liên quan cao nhất cho mỗi miền duy nhất. Một miền có thể có nhiều bản ghi nhưng với các tiêu đề, mô tả khác nhau, vv Vấn đề là, thay vì nhận 1 bản ghi có chứa một tên miền duy nhất, nó nhóm tất cả các bản ghi của tên miền duy nhất đó và xuất tất cả chúng. Tôi chỉ muốn recordset với số điểm cao nhất phù hợp cho mỗi tên miền độc đáo cho mỗi nhóm trước khi nó kết quả đầu ra (miền và khác nhau với sự liên quan cao nhất cho nhóm đó) bên cạnhChọn Giới hạn tối đa 1 từ nhóm
SELECT title, html, sum(relevance) FROM
(
SELECT title, html, 10 AS relevance FROM page WHERE title like ‘%about%’ UNION
SELECT title, html, 7 AS relevance FROM page WHERE html like ‘%about%’ UNION
SELECT title, html, 5 AS relevance FROM page WHERE keywords like ‘%about%’ UNION
SELECT title, html, 2 AS relevance FROM page WHERE description like ‘%about%’
) results
GROUP BY title, html
ORDER BY relevance desc;
tôi nhận được:
domain1 title html
domain1 title html
domain1 title html
domain2 title html
domain2 title html
domain2 title html
Những gì tôi muốn là
domain1 title html
domain2 title html
domain3 title html
domain4 title html
domain5 title html
Không có vấn đề gì tôi làm điều này tôi tiếp tục nhận được cột không hợp lệ 'liên quan' – Patriotec
@kinjite: Đó là vì 'liên quan' là một bí danh cột, được tham chiếu trong mệnh đề WHERE. SQL Server hỗ trợ tham chiếu các bí danh cột trong GROUP BY, nhưng không phải là WHERE –
@OMG Ponies: hoặc ORDER BY, nếu tôi nhớ chính xác. Tôi đã chỉnh sửa câu trả lời để sửa lỗi này. Nó rất xấu, nhưng nó sẽ hoạt động. Tôi đã sử dụng hack này trước đây. –