У меня есть окно поиска, в котором можно ввести какой-либо текст и получить результаты из базы данных, например, если бы я искал "Джон Смит", запись для всех Джона Смита появлялась.
Тем не менее, я хотел бы сделать поиск менее конкретным, так как, если бы я просто искал "Джон", то эта запись появится.
Это мой запрос:
cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name=? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, query, query,))
Как вы можете видеть, он также возвращает поиск не только "имя", но "местоположение" и "образование", поэтому я хотел бы, чтобы поиск по ключевым словам также применялся к ним.
Благодарю.
Вам нужен оператор LIKE
. Ваш SQL будет выглядеть так:
SELECT name, id, location, education FROM accounts WHERE email='John'
COLLATE NOCASE OR name LIKE '%John%' COLLATE NOCASE OR education='John'
COLLATE NOCASE
Обратите внимание на LIKE
в OR name LIKE '%John%'
cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name LIKE ? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, '%'+query+'%', query,))
Опять же, обратите внимание, что оператор OR
для name
был изменен:
OR name LIKE ?
При этом мы также изменили переданный параметр:
'%'+query+'%'
Это закроет вашу строку поиска в %
символов, позволяя вашей строке появляться в любом месте поля. Чтобы сделать это с помощью параметров, мы должны заключить ваш параметр в подстановочные знаки (%
)
SELECT * FROM phonebook WHERE name LIKE "%John%"
то, что вы хотите?