>  기사  >  백엔드 개발  >  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. 함수 검색($keyword,$table,$ 필드)
  6. {
  7. /**
  8. //형식적 매개변수 설명:
  9. //keyword는 "Beijing Capital Direction Train"과 같은 키워드입니다.공백이 있든 없든
  10. //table은 enter_gongyin_pic과 같은 테이블 이름입니다.
  11. //필드는 하나의 필드를 찾는 경우 이름을 입력하세요.
  12. //두 개 이상의 필드를 찾는 경우 이름은 picdir을 사용하세요.
  13. */
  14. / /먼저 필드 결정
  15. $new_field =explode(" ",$field); //스트리핑 누르기
  16. $field_count=count($new_field) //얻은 결과 수
  17. $newstring=explode(" ",$ 키워드); //공백으로 제거
  18. $newstring2=array()
  19. //문자열에서 불필요한 공백 요소 제거
  20. $i=0; > foreach ($newstring as $ key => $value) {
  21. if($value!="")
  22. {
  23. $newstring2[$i]=$value
  24. $i ;
  25. }
  26. }
  27. //문자열에서 불필요한 공백과 삼촌 요소를 제거합니다.
  28. $result_count=count($newstring2) //얻은 결과 수
  29. //SQL 문 생성
  30. //* if($field_count==1) //필드 1개 찾기 START **
  31. if($field_count==1) //필드 1개 찾기
  32. {
  33. if($result_count ==1) //키 세그먼트인지 판단
  34. {
  35. $newstring_search=$newstring2[0]
  36. $sql="SELECT *
  37. FROM `$table`
  38. WHERE ` ".$new_field[0]."` LIKE '%$newstring_search%'";
  39. }
  40. if($result_count>1) //키 세그먼트가 여러 개 있는지 판단
  41. {
  42. $sql="SELECT *
  43. FROM `$table`
  44. WHERE ";
  45. $sql_add=""
  46. foreach($newstring2 as $key = > $value)
  47. {
  48. if($key==0)
  49. {
  50. $sql_add=$sql_add."`".$new_field[0]."` LIKE '%'. $value."% '";
  51. }
  52. else
  53. {
  54. $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value. "%'";
  55. }
  56. }

  57. $sql=$sql.$sql_add;

  58. }
  59. }

  60. / /***** if($field_count==1) //필드 1개 찾기END ******

  61. //**** if($field_count>1) //여러 필드 찾기 fields START *****
  62. if($field_count>1) //여러 필드를 찾습니다. 이때 $new_field는 배열입니다. 여러 필드가 있음
  63. {
  64. if($result_count==1) //키 세그먼트인지 판단
  65. {
  66. $newstring_search=$newstring2[0] //$newstring_search는 키워드입니다.
  67. $sql="SELECT *
  68. FROM `$table`
  69. WHERE "
  70. $sql_add="";//새로 추가된 필드
  71. foreach ($new_field as $key => $value)
  72. {
  73. if($key==0)
  74. {
  75. $sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."% '";
  76. }
  77. else
  78. {
  79. $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'";
  80. }
  81. }
  82. $sql=$sql.$sql_add;
  83. }
  84. if($result_count>1) //키 세그먼트가 여러 개인지 판단(키워드가 여러 개) ===
  85. {
  86. $sql="SELECT *
  87. FROM `$table`
  88. WHERE "
  89. $sql_add="";//새로 추가된 필드
  90. foreach($new_field as $key => ; $value)
  91. {
  92. if($key==0) //$new_field[0]을 만났을 때 예: `a` LIKE '%1%' OR `a` LIKE '%2 %' OR `a` LIKE '%3%'
  93. { //중첩 foreach
  94. foreach ($newstring2 as $key2 => $value2)
  95. {
  96. if($key2== 0)
  97. {
  98. $sql_add=$sql_add."`".$value."` LIKE '%".$value2."%'"
  99. }
  100. else
  101. {
  102. $sql_add =$sql_add." OR `".$value."` LIKE '%".$value2."%'"
  103. }
  104. }
  105. // 중첩된 foreach
  106. }
  107. else
  108. //(picdir 테이블 이름 확인 등 다중 필드인 경우) FOREACH 연속 루프를 시작하고 매번 ELSE $new_field[1] $new_field[2] $new_field[3]를 실행합니다.
  109. //해당 값은 $value입니다.
  110. {
  111. //중첩 foreach(다중 필드 및 다중 키워드)
  112. foreach($newstring2 as $key2 => $value2)
  113. {
  114. if($key2==0)
  115. {
  116. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"
  117. }
  118. else
  119. {
  120. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"
  121. }
  122. }
  123. //중첩된 foreach
  124. }
  125. }//foreach($new_field as $key => $value) 종료
  126. $sql=$sql.$sql_add; if($result_count>1) end
  127. }//if($field_count>1) end
  128. //*** if($field_count>1) //여러 필드 찾기END ***
  129. return $ sql;
  130. }

코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.