iOS程式設計師利用分頁和模糊查詢技術實現一個App介面

杭城小劉發表於2019-03-01

摘要: 模糊查詢技術、分頁技術、App介面

1、分頁問題

關鍵技術點:php執行sql語句。示例:“SELECT * FROM hotel WHERE subject=`10` and address like `%杭州%` LIMIT 0,4”。注意:LIMIT後需要跟2個數字,1個是起始位置,2是結束位置。
複製程式碼

可以對limit函式進行封裝:select *from user limit (page-1)size,pagesize;

單例模式編寫App介面的注意點:

(1)、php後臺獲取引數,之後根據引數轉換成SQL語句;

(2)、php執行SQL語句,將結果轉換成JSON,返回給客戶端
複製程式碼

2、模糊搜尋

SQL匹配模式(開發中應用最多的一種):
複製程式碼

(1)、使用SQL匹配模式,不能使用操作符 = 或 != ,而是使用操作符LIKE或者NOT LIKE

(2)、使用SQL匹配模式,MySQL提供了2種萬用字元。

%:表示任意數量的任意字元(包括0個)

_:表示任意的單個字元

例子:u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”。如果要找回包含“三”和“貓”的紀錄

     “select *from user where u_name LIKE `%三%` and u_name LIKE `%貓%`;

     若使用“select *from user where u_name LIKE `%三%貓%`;”只能找出:三腳貓
複製程式碼

(3)、使用SQL匹配模式,如果匹配格式當中不包含以上2種萬用字元中的任意1個,其查詢效果等同於= 或 !=

(4)、使用SQL匹配模式,預設情況下是不區分大小寫的

正規表示式匹配模式(不推薦):

(1)、 []:表示括號內所列字元中的一個:指定一個字元、字串或範圍,要求所匹配物件為它們中的任意一個

    比如 SELECT * FROM [user] WHERE u_name LIKE `[張李王]三`。將找出“張三”、“李三”、“王三”(而不是“張李王三”);

    比如[ ] 內有一系列字元(01234、abcde之類的)則可略寫為“0-4”、“a-e”。SELECT * FROM [user] WHERE u_name LIKE `老[1-9]`-> 將找出“老1”、“老2”、……、“老9”;

(2)、[^]:表示不在括號所列之內的單個字元。其取值和[]相同,要求匹配物件為指定字元以外的任意一個字元

  比如 SELECT * FROM [user] WHERE u_name LIKE `[^張李王]三`。將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等
複製程式碼

(3)、.:匹配任意的單個字元

(4)、^:表示以某個字元或字串開頭。^a:以a開頭

(5)、$:表示以某個字元或字串結尾。s$:以s結尾

(6)、*:匹配0個或多個在它前面的字元

使用正規表示式匹配的操作符是:REGEXP和NOT REGEXP(RLIKE或NOT RLIKE)

注意啊:正規表示式和SQl匹配模式工作原理不一樣:正則只要匹配出符合條件就馬上算成功;而SQl需要嚴格匹配。比如同樣需要寫從酒店表中拿出地址中包含“杭州”的酒店

SQL:SELECT *FROM hotel WHERE address LIKE `%杭州%`;

正則:SELECT FROM hotel WHERE address REGEXP `^[杭][州]’;

需要特別注意的是:如果所查詢的內容包含萬用字元時,導致我們查詢”%”,”_”,”[“的語句無法正常實現。因此我們需要特殊處理。

需要特別注意的是:如果所查詢的內容包含萬用字元時,導致我們查詢”%”,”_”,”[“的語句無法正常實現。因此我們需要特殊處理。

function sql_encode($sql){
  $sql = replace($sql,"[","[[]");
  $sql = replace($sql,"%","[%]");
  $sql = replace($sql,"_","[_]");
  return $sql;
}
複製程式碼

最後貼一個利用模糊查詢實現分頁查詢的介面。

<?php
/**
 * Created by PhpStorm.
 * User: geek
 * Date: 2017/2/20
 * Time: 上午9:15
 */

header(`content-type:text.html;charset=utf-8`);
error_reporting(0);
require_once `../../model/PdoMySQL.class.php`;
require_once `../../model/config.php`;
require_once `Response.php`;


class HotelList
{
    private $tableName = "hotel";
    private $telephone = "";
    private $cityName= "";
    private $subjectId = "";
    private $page = 0;
    private $size = 0;



    protected static $_instance = null;

    protected function  __construct()
    {

    }

    protected function  __clone()
    {
        // TODO: Implement __clone() method.
    }


    public function  getInstance()
    {
        if (self::$_instance === null) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    function getHotels()
    {
        self.$this->telephone = $_REQUEST["telephone"];
        self.$this->subjectId = $_REQUEST["subjectId"];
        self.$this->cityName = $_REQUEST["cityName"];
        self.$this->page = $_REQUEST["page"];
        self.$this->size = $_REQUEST["size"];

        $mysqlPdo = new PdoMySQL();

        if($this->telephone == ""){
            Response::show(201,"fail","非安全的資料請求","json");
        }
        $userRows = $mysqlPdo->find("user","telephone=`$this-              >telephone`");
        if($userRows[0]["telephone"] != $this->telephone){
            Response::show(201,"fail","非安全的資料請求","json");
        }
        $city = str_replace("市","",$this->cityName);
        $allrows = $mysqlPdo->find($this->tableName,"subject=`$this->subjectId` and address like `%$city%`","","","","",[(intval($this->page)-1)*intval($this->size),intval($this->page)*intval($this->size)]);
        Response::show(200,`酒店列表獲取成功`,$allrows,`json`);

    }
}

$lister = HotelList::getInstance();
$lister->getHotels();
複製程式碼

其中:Respone和PdoMySQL的2個類分別是介面資料展示的類和PDO操作的一個封裝。
如果有需要請留下郵箱。

相關文章