Bạn có thể khắc phục sự cố chức năng REPLACE()
phân biệt chữ hoa chữ thường của mysql bằng cách sử dụng LOWER()
.
Sự cẩu thả của nó, nhưng cuối cùng, truy vấn này chạy khá nhanh.
Để tăng tốc độ, tôi lấy kết quả trong một lựa chọn mà tôi đã khai báo dưới dạng bảng dẫn xuất trong truy vấn 'bên ngoài' của tôi. Kể từ mysql đã có kết quả tại thời điểm này, phương pháp thay thế hoạt động khá nhanh chóng.
Tôi đã tạo truy vấn tương tự như truy vấn bên dưới để tìm kiếm nhiều cụm từ trong nhiều bảng và nhiều cột.Tôi có được một 'phù hợp' số tương đương với tổng số lượng của tất cả các occurrances của tất cả các thuật ngữ tìm kiếm tìm thấy trong tất cả các cột đã tìm kiếm
SELECT DISTINCT (
((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('another'),'')))/length('another'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('another'),'')))/length('another'))
) as relevance,
x.ent_type,
x.ent_id,
x.this_id as anchor,
page.page_name
FROM (
(SELECT
'Foo' as ent_type,
sp.sp_id as ent_id,
sp.page_id as this_id,
sp.title as ent_title,
sp.content as ent_content,
sp.page_id as page_id
FROM sp
WHERE (sp.title LIKE '%there%' OR sp.content LIKE '%there%' OR sp.title LIKE '%another%' OR sp.content LIKE '%another%') AND (sp_content.title NOT LIKE '%goes%' AND sp_content.content NOT LIKE '%goes%')
) UNION (
[search a different table here.....]
)
) as x
JOIN page ON page.page_id = x.page_id
WHERE page.rstatus = 'ACTIVE'
ORDER BY relevance DESC, ent_title;
Hy vọng điều này sẽ giúp người
- Seacrest ra
này kiểm tra có bao nhiêu hàng chứa chuỗi tìm kiếm. Người hỏi muốn đếm tần suất chuỗi tìm kiếm được chứa trong mỗi hàng. – flu