I would like to create query to search given information in table users
. Table consists: of id
, username
, firstname
, lastname
, phone
and email
.
Sample search text: mat h 50 @ld
The only record that should be returned: 1 | admin | mat | hladeo | 123450789 | admin@localhost
1 | admin | mat | hladeo | 123450789 | admin@localhost
My query:
SELECT * FROM `users` WHERE (
(`firstname` LIKE '%mat%') || (`firstname` LIKE '%h%') ||
(`firstname` LIKE '%50%') || (`firstname` LIKE '%@l%') ||
(`firstname` LIKE '%d%')
) && (
(`lastname` LIKE '%mat%') || (`lastname` LIKE '%h%') ||
(`lastname` LIKE '%50%') || (`lastname` LIKE '%@l%') ||
(`lastname` LIKE '%d%')
) && (
(`phone` LIKE '%mat%') || (`phone` LIKE '%h%' ) ||
(`phone` LIKE '%50%') || (`phone` LIKE '%@l%') ||
(`phone` LIKE '%d%')
) && (
(`email` LIKE '%mat%') || (`email` LIKE '%h%') ||
(`email` LIKE '%50%' ) || (`email` LIKE '%@l%') ||
(`email` LIKE '%d%')
) && (
(`username` LIKE '%mat%') || (`username` LIKE '%h%') ||
(`username` LIKE '%50%') || (`username` LIKE '%@l%') ||
(`username` LIKE '%d%')
)
But this query is returning people who have got username containing d
and their phone number contains 50
.
EDIT:
this query returns 3 rows:
1 | admin | mat | hladeo | 123450789 | admin@localhost
8 | dillese | Adriana | Zolch | 44450232 | dilesse@msn.com
12 | dcolhut | Denise | Colhut | 502222222 | dcolhut@msn.com
and should return only first row (because matches all the requirements).
==========
And the main question - how to optimize this query? Is it possible to make it simplier?
Regards
I think this should do it:
SELECT * FROM `users` WHERE (
(firstname LIKE '%mat%' OR lastname LIKE '%mat%' OR
phone LIKE '%mat%' OR email LIKE '%mat%' OR username LIKE '%mat%')
AND
(firstname LIKE '%h%' OR lastname LIKE '%h%' OR
phone LIKE '%h%' OR email LIKE '%h%' OR username LIKE '%h%')
AND
(firstname LIKE '%50%' OR lastname LIKE '%50%' OR
phone LIKE '%50%' OR email LIKE '%50%' OR username LIKE '%50%')
AND
(firstname LIKE '%@l%' OR lastname LIKE '%@l%' OR
phone LIKE '%@l%' OR email LIKE '%@l%' OR username LIKE '%@l%')
AND
(firstname LIKE '%d%' OR lastname LIKE '%d%' OR
phone LIKE '%d%' OR email LIKE '%d%' OR username LIKE '%d%')
)
You need to test each criteria separately, not each field.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.