我需要一些建议如何在数据库中执行搜索。例如,我在数据库中有一个名为Student
的表,其列为:NAME, SURNAME, UNIVERSITY, AGE, COURSE
。
当我填写搜索表单时,我没有指定SURNAME和大学,我希望我的搜索结果是每个学生,其中NAME =我的指定名称,年龄 - 我指定的年龄和课程 - 我指定的课程和SURNAME和大学可以是任何一个。
有人可以给我一些建议吗?
修改
感谢您快速重播。但似乎我不理解某些东西或它不起作用。这是我的真实问题:
SELECT UNIVERSITY, INFORMANT_NAME, AGE
FROM informant
WHERE UNIVERSITY='%VDU%'
AND INFORMANT_NAME='%Mindaugas Jonaitis%'
AND AGE='%21%';
它不会给我任何结果。
SELECT UNIVERSITY, INFORMANT_NAME, AGE
FROM informant
WHERE UNIVERSITY='VDU'
AND INFORMANT_NAME='Mindaugas Jonaitis'
AND AGE='21';
此查询可以,但仅适用于指定的值。我希望返回的结果将是来自表的所有数据,其中UNIVERSITY = 'VDU'
或其他值未提供或提供null或将被跳过的内容。
SELECT UNIVERSITY, INFORMANT_NAME, AGE
FROM informant
WHERE UNIVERSITY='VDU'
AND INFORMANT_NAME='????'
AND AGE='????';
答案 0 :(得分:1)
如果您想使用通配符,则需要使用LIKE
,而不是=
。
SELECT UNIVERSITY, INFORMANT_NAME, AGE
FROM informant
WHERE UNIVERSITY LIKE '%VDU%'
AND INFORMANT_NAME LIKE '%Mindaugas Jonaitis%'
AND AGE LIKE '%21%';
然而,将like
与前导通配符一起使用将禁用在该字段上使用索引的任何机会
如果您将MySQL与MyISAM一起使用,请在要使用通配符搜索的字段上添加全文索引并使用:
SELECT UNIVERSITY, INFORMANT_NAME, AGE
FROM informant
WHERE UNIVERSITY LIKE '%VDU%'
AND MATCH(INFORMANT_NAME) AGAINST('Mindaugas Jonaitis')
AND AGE LIKE '21%';
Match .. against
仅适用于超过4个字符的搜索词组。在年龄中搜索领先的通配符真的没有意义。我通常不希望得到21,31,41
的所有人,但我常常想要得到所有20多岁的人。
答案 1 :(得分:0)
有很多方法可以做到这一点。但对于所有这些人,您需要从Session
抓取Hibernate
。从那时起你可以:
query
named query
个对象
Query
sql string
个对象
Criteria
对象所有这些,只需query.list()
或criteria.list()
。
欲了解更多信息:
答案 2 :(得分:0)
findByExample DAO方法在这里总是很有用。