SQL users searching query

对着背影说爱祢 提交于 2019-12-24 07:32:06

问题


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 @l d

The only record that should be returned: 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


回答1:


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.



来源:https://stackoverflow.com/questions/24785418/sql-users-searching-query

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!