我在搜索中遇到了一些问题。我有一个表classDetails,我有className,classNumber,classSubject。现在在类名中会有一些数据集。计算机科学,计算机,电气等。课堂上的主题数据就像。 IT,EEE,MEC等......在类号中数据就像。 233,3213,12等。如果用户搜索他们用来搜索的表,如233或eee 12等,我已经尝试了很多选项,如
SELECT * FROM classes_detail
WHERE classDeleted = 0 AND
(
LOWER(classCollege) LIKE "%'. trim($searchTxt). '%" OR
classNumber LIKE "%'. trim($searchTxt). '%" OR
CONCAT( classNumber , LOWER(classCollege) ) LIKE "%'. trim($searchTxt). '%"
)
任何人都可以找到我最好的搜索词。
答案 0 :(得分:1)
你可以尝试
SELECT * FROM classes_detail
WHERE classDeleted = 0
AND LOWER(CONCAT_WS(' ',subject,class_num)) = LOWER(your_param)
或(搜索更多自由文本)
SELECT * FROM classes_detail
WHERE classDeleted = 0
AND (LOWER(CONCAT_WS(' ', subject, class_num)) = LOWER(your_param)
OR LOWER(subject) = LOWER(your_param)
OR LOWER(class_num) = LOWER(your_param))
答案 1 :(得分:0)
自由文本搜索是一个很大的主题(只需要问Google!),您可以通过多种方式来解决这个问题。如果您的数据结构良好,相当静态且相对较小(即类主题只有5-10个选项,如IT,EEE,MEC很少更改),您可能希望优化用户的搜索选项,以便他们必须明确选择他们正在寻找的那些。
或者,您可能想要调查MySQL's full-text searching options。或者您甚至可能想要升级并查看像Lucene这样的独立解决方案(这只是一个选项,有更多类似的加载)。
没有一种尺寸适合所有人;这一切都取决于您的数据结构以及用户想要的内容。