複数の名前の人を検索するクエリ

KPopOG:

私は、クライアントのサイトのユーザーが、主に結婚のために名前を変更した可能性がある人を知っている人を検索できる、かなり大きなプロジェクトに取り組んでいます。基本的に、ユーザーはこれまでに使用したすべての名前でサインアップし、データはMySQLデータベースに入力されます。次のステップは実際に検索を作成することです。これにより、ユーザーは覚えている名前を入力することができます。

これはデータベースへの登録例です:

username first0 first1 first2 first3 first4
(email)  Lisa   John   Frank  Sam    Smith

現在、私のクエリは次のようになります。

SELECT * FROM NAMES
WHERE (
    `names`.`first0` IN ("Lisa", "Sam", "")
    AND `names`.`first1` IN ("Lisa", "Sam", "")
    AND `names`.`first2` IN ("Lisa", "Sam", "")
    AND `names`.`first3` IN ("Lisa", "Sam", "")
    AND `names`.`first4` IN ("Lisa", "Sam", "")

**検索フォームに入力したデータを正確な名前に置き換えます。

Frankリストに含まれていないfirst2 =のため、このクエリは機能しません人が誰かがデータベースに入力したすべての名前を知らない場合、すべてが壊れます。

ただし、Lisa誰かがLisa名前の1つだけを入力した場合に、名前が一致するすべての結果が返されるようにしたくないので、ORステートメントを使用したくないと思います。

誰か私がこれをどうやってやるのか知っていますか?

Caius Jard:

ここで不必要に拘束されています。代わりに検討してください:

User
UserId, OtherData

UserNames
UserId, Name, Kind

次のようなデータ:

UserId, OtherData
1, Blahblah

UserId, Name, Type
1, Lisa, First 
1, Jane, Middle
1, Smith, Last   
1, Leese, First
1, Jones, Last

リースとしても知られるリサジェーンスミスは結婚し、名前をリサジェーンジョーンズに変更しました

「任意の数の名前を入力し、その種類を示す」というWebサイトのユーザーを提示する場合は、名前の種類がすべて記載されているユーザーIDを見つけるクエリを実行できます。

これは、動的に参加する、または条件付き集計を行うなど、単純な場合があります

たとえば、Webユーザーが姓として「Leese」を入力し、姓として「Jones」を入力した場合、次のことができます。

SELECT UserID FROM UserNames 
WHERE 
  (name = 'Leese' AND type = 'First') OR
  (name = 'Jones' AND type = 'Last')
GROUP BY
  UserID 
HAVING count(*) = 2 --2 is the number of names entered, leese and jones.  If your where clause had 5 names, this would be 5

または、結合アプローチを使用することもできます(これは、Webユーザーが3つの名前/種類を入力した場合)。

SELECT u1.UserID 
FROM
  UserNames u1 
  INNER JOIN Usernames u2 ON u1.UserID = u2.UserID
  INNER JOIN Usernames u3 ON u1.UserID = u3.UserID
WHERE 
  u1.name = 'Leese' AND u1.type = 'First' AND
  u2.name = 'Jones' AND u2.type = 'Last' AND
  u3.name = 'Smith' AND u3.type = 'Last' AND
  

動的クエリを作成するときは、値をSQLに連結しないくださいクエリを動的に作成しているからといって、ウィンドウからパラメータ化をスローする言い訳にはなりません。SQLストリングとパラメータープレースホルダーを連結してSQLを作成し、パラメーター値を個別に指定します。

文字列を{プレースホルダー}で補間する言語の疑似コード(phpは知りません):

string fromclause = ""
string whereclause = ""
for i = 0 to webrequest.form.values.length - 1

  string name = webrequest.form.values[i].name
  string type = webrequest.form.values[i].type


  if i == 0 then
    fromclause = fromclause + "Usernames u{i}"
  else
    fromclause = fromclause + " INNER JOIN Usernames u{i} ON u1.UserID = u{i}.UserID

  whereclause = whereclause + " u{i}.Name = @paramName{i} AND u{i}.type = @paramType{i}"

  sqlcommand.parameters.add("@paramName{i}", name)
  sqlcommand.parameters.add("@paramType{i}", type)

next i

sqlcommand.commandtext = "SELECT UserID FROM {fromclause} WHERE {whereclause}"

最後に、すべてパラメーター化されたsqlコマンドを使用します。パラメーターはすべて指定された値です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

検索の名前と名前の混合phpクエリを使用する

分類Dev

AQL:名前が複数回出現し、アメリカ人であるすべての人を検索します

分類Dev

1回のクエリで複数のユーザー名を検索する方法

分類Dev

無料検索で別のテーブルから名前を検索するSQLクエリ

分類Dev

Active Directoryを検索し、複数のグループ内の名前のリストをPowerShellのtxtファイルにエクスポートします

分類Dev

MySQLクエリで複数の属性を検索する(実際の例を使用)

分類Dev

複数の検索条件に対する検索クエリの最適化

分類Dev

1つのクエリで複数の単語を検索するには?

分類Dev

検索/名前変更を使用して複数のファイル名の名前を変更する方法

分類Dev

同じ名前で始まる複数の値のクエリを更新する

分類Dev

同じ名前の複数の行を更新するSQLServerクエリ

分類Dev

内部結合テーブルで複数のクエリを検索する

分類Dev

内部結合テーブルで複数のクエリを検索する

分類Dev

Lucene4.5。StringFieldで複数用語のクエリを検索する

分類Dev

filterrific:複数の単語でクエリを検索する方法は?

分類Dev

SpringJPAを使用して名前で複数のオブジェクトを検索する

分類Dev

複数の列とテーブルで名前を検索する

分類Dev

CakePHP:Mysqlは複数の列で複数のクエリを検索します

分類Dev

名前がBで始まる俳優の映画のタイトルを検索するMySQLクエリ

分類Dev

同じuser_idが3を超えるすべての名前を検索するSQLクエリ

分類Dev

2つの日付と別の列を名前で検索するにはSQLクエリが必要です

分類Dev

SQLクエリで複数の名前空間xmlを解析する方法

分類Dev

名前でユーザーを検索するFirebaseクエリ

分類Dev

MEAN&Geospatialクエリ-名前が付けられた別のLineStringと交差するLineStringを検索します

分類Dev

LinkedinのRESTAPIで名前のある人を検索

分類Dev

5番目にレンタルされた回数が多い映画の名前を検索するクエリを作成します

分類Dev

名前のない関数の定義を検索する方法

分類Dev

1つのクエリでIDと名前で製品データを検索する方法

分類Dev

特定の名前のファイルまたはディレクトリの名前を検索する

Related 関連記事

  1. 1

    検索の名前と名前の混合phpクエリを使用する

  2. 2

    AQL:名前が複数回出現し、アメリカ人であるすべての人を検索します

  3. 3

    1回のクエリで複数のユーザー名を検索する方法

  4. 4

    無料検索で別のテーブルから名前を検索するSQLクエリ

  5. 5

    Active Directoryを検索し、複数のグループ内の名前のリストをPowerShellのtxtファイルにエクスポートします

  6. 6

    MySQLクエリで複数の属性を検索する(実際の例を使用)

  7. 7

    複数の検索条件に対する検索クエリの最適化

  8. 8

    1つのクエリで複数の単語を検索するには?

  9. 9

    検索/名前変更を使用して複数のファイル名の名前を変更する方法

  10. 10

    同じ名前で始まる複数の値のクエリを更新する

  11. 11

    同じ名前の複数の行を更新するSQLServerクエリ

  12. 12

    内部結合テーブルで複数のクエリを検索する

  13. 13

    内部結合テーブルで複数のクエリを検索する

  14. 14

    Lucene4.5。StringFieldで複数用語のクエリを検索する

  15. 15

    filterrific:複数の単語でクエリを検索する方法は?

  16. 16

    SpringJPAを使用して名前で複数のオブジェクトを検索する

  17. 17

    複数の列とテーブルで名前を検索する

  18. 18

    CakePHP:Mysqlは複数の列で複数のクエリを検索します

  19. 19

    名前がBで始まる俳優の映画のタイトルを検索するMySQLクエリ

  20. 20

    同じuser_idが3を超えるすべての名前を検索するSQLクエリ

  21. 21

    2つの日付と別の列を名前で検索するにはSQLクエリが必要です

  22. 22

    SQLクエリで複数の名前空間xmlを解析する方法

  23. 23

    名前でユーザーを検索するFirebaseクエリ

  24. 24

    MEAN&Geospatialクエリ-名前が付けられた別のLineStringと交差するLineStringを検索します

  25. 25

    LinkedinのRESTAPIで名前のある人を検索

  26. 26

    5番目にレンタルされた回数が多い映画の名前を検索するクエリを作成します

  27. 27

    名前のない関数の定義を検索する方法

  28. 28

    1つのクエリでIDと名前で製品データを検索する方法

  29. 29

    特定の名前のファイルまたはディレクトリの名前を検索する

ホットタグ

アーカイブ