ホームページ  >  記事  >  バックエンド開発  >  SQL ステートメントを生成するための PHP 複数キーワードおよび複数フィールド関数

SQL ステートメントを生成するための PHP 複数キーワードおよび複数フィールド関数

WBOY
WBOYオリジナル
2016-07-25 08:55:541292ブラウズ
  1. $keyword="1 2 3";
  2. echo $sql=search($keyword,"enter_gongyin_pic","a+b+c") //関数生成、LIMIT なし、ORDER BY なし
コードをコピー

SQLステートメントを生成します:

  1. SELECT * FROM `enter_gongyin_pic` WHERE `a` LIKE '%1%' OR 'a` LIKE '%2%' OR 'a` LIKE '%3%' OR 'b` LIKE '%1 %' OR 'b' LIKE '%2%' OR 'b' LIKE '%3%' OR 'c' LIKE '%1%' OR 'c' LIKE '%2%' OR 'c' LIKE '%3 %'
コードをコピー

$keywordはPOSTまたはGETでスペース区切りで取得され、複数のフィールドで検索できます。

複数のキーワードと複数のフィールドを含む SQL クエリ ステートメントを生成する関数:

  1. /**

  2. * クエリ条件構築ステートメント
  3. * 編集: bbs.it-home.org
  4. */
  5. function search($keyword,$table,$field)
  6. {
  7. /**
  8. //正式なパラメータの説明:
  9. //キーワードは「北京首都方面列車」などのキーワードです。スペースの有無にかかわらず、
  10. //table はテーブル名です (enter_gongyin_pic など)。
  11. //フィールドはフィールドの組み合わせです。1 つのフィールドを探している場合は、名前を記述します。
  12. */
  13. //最初にフィールドを決定します。 .
  14. $new_field=explode("+",$field ); //+ を押して削除します
  15. $field_count=count($new_field) //取得された結果の数
  16. $newstring=explode(" ",$キーワード); //スペースを押して削除します
  17. $newstring2=array() ;
  18. //文字列から不要なスペースとアンクル要素を削除します
  19. $i=0; foreach ($newstring as $key => $value) {
  20. if($value!="")
  21. {
  22. $newstring2 [$i]=$value;
  23. }
  24. }
  25. //文字列から不要なスペースとアンクル要素を削除します
  26. $result_count=count ($newstring2); //取得した結果の数
  27. / /SQL ステートメントを生成
  28. //* if($field_count==1) // 1 つのフィールドを検索 START **
  29. if($field_count==1) // 1 フィールド
  30. {
  31. if($result_count==1 ) // キーセグメントかどうかを判断します
  32. {
  33. $newstring_search=$newstring2[0];
  34. $sql="SELECT *
  35. FROM `$table`
  36. WHERE ` ".$new_field[0]."` LIKE '% $newstring_search%'";
  37. }
  38. if($result_count>1) //キーセグメントが複数あるか判定
  39. {
  40. $sql="SELECT *
  41. FROM `$table`
  42. WHERE ";
  43. $sql_add= "";
  44. foreach ($newstring2 as $key => $value)
  45. {
  46. if($key==0)
  47. {
  48. $sql_add=$sql_add." `".$new_field[0]."` LIKE '%".$value."%'";
  49. }
  50. else
  51. {
  52. $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value."%'" ;
  53. }
  54. }

  55. $sql=$sql.$sql_add;

  56. }
  57. }

  58. //***** if($field_count= =1) // 1 つのフィールドを検索END ******

  59. //**** if($field_count>1) // 複数のフィールドを検索 START **** *
  60. if($field_count>1) //複数のフィールドを検索します。このとき、$new_field は配列です。複数のフィールドがあります
  61. {
  62. if($result_count==1) //キーセグメントであるかどうかを判断します
  63. {
  64. $newstring_search=$newstring2[0] //$newstring_search はキーワードです
  65. ​​ $sql="SELECT *
  66. ; FROM `$table`
  67. WHERE ";
  68. $sql_add="";//新しく追加されたフィールド
  69. foreach ($new_field as $key => $value)
  70. {
  71. if($key==0)
  72. {
  73. $ sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."%'"
  74. }
  75. else
  76. {
  77. $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'";
  78. }
  79. }
  80. $sql=$sql.$sql_add;
  81. }
  82. if($result_count>1) //キーセグメントが複数あるかどうかを判定(複数キーWord) ) ===
  83. {
  84. $sql="SELECT *
  85. FROM `$table`
  86. WHERE ";
  87. $sql_add="";//新しく追加されたフィールド
  88. foreach ($new_field as $key => $value)
  89. {
  90. if($key==0) //$new_field[0] が発生した場合 例: `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3 %'
  91. { //ネストされた foreach
  92. foreach ($newstring2 as $key2 => $value2)
  93. {
  94. if($key2==0)
  95. {
  96. $sql_add=$sql_add."`".$value. '%".$value2."%'";
  97. }
  98. else
  99. {
  100. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'" ;
  101. }
  102. }
  103. //ネストされた foreach
  104. }
  105. else
  106. //(name+picdir テーブルの確認など、複数フィールドの場合) FOREACH 連続ループを開始し、毎回 ELSE を実行 $new_field[1] $new_field[ 2] $new_field[3]。
  107. //対応する値は $value です
  108. {
  109. //ネストされた foreach (複数のフィールドと複数のキーワード)
  110. foreach ($newstring2 as $key2 => $value2)
  111. {
  112. if($key2==0)
  113. {
  114. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"
  115. }
  116. else
  117. {
  118. $sql_add=$sql_add." OR `". ."` LIKE '%".$value2."%'"
  119. }
  120. }
  121. //ネストされた foreach
  122. }
  123. }// foreach の終わり ($new_field as $key => $value)
  124. $sql =$sql.$sql_add;
  125. }//if($result_count>1) end
  126. }//if($field_count>1) end
  127. //*** if($field_count>1) //さらにフィールドを検索END * **
  128. return $sql
  129. }

  130. コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。