关键词搜索&分页功能的后端代码(PHP + MySQL)

1.功能介绍

**使用后端语言:**PHP
后端数据库: MySQL
编程思路:
1.关键词搜索——

  • 接受前端传来的用户搜索的关键词,是由关键词组成的字符串;
  • 关键词的个数不确定,关键词之间一般用空格隔开,如kw=iphone 64g black;
  • 在php中,用explode() 函数根据空格把字符串打散为由关键词组成的数组,如 [iphone, 64g, black];
  • 遍历关键词数组,将每个关键词拼接成sql模糊条件查询语句的字段,如
    [‘%iphone%’, ‘%64g%’, ‘black’];
  • 用php的implode() 函数返回由数组元素组合成的字符串,即完整的sql模糊条件查询语句。

2.分页——

  • 接受前端传来要显示第几页的参数,如果没有传参,默认显示第一页;
  • 每页显示多少个商品可规定好数量;
  • 对关键词搜索查询出的商品进行分页查询;
  • 获得关键词搜索查询出的商品的总数;
  • 商品总数/每页显示的商品个数,用php的ceil()函数上取整(有小数向上进一位),得出商品一共要显示几页。

2.代码实现

2.1 数据库建表

/*商品明细表*/
CREATE TABLE xxx_product_details(
  pid INT,
  fid INT,
  title VARCHAR(128),
  subtitle VARCHAR(64),
  price DECIMAL(10,2),
  avatar VARCHAR(128),
  user_name VARCHAR(32),
  details VARCHAR(1024),
  pic VARCHAR(128)
);

/*商品明细表图片*/
CREATE TABLE xxx_product_details_pic(
  cid INT,
  pid INT,
  sm VARCHAR(128),
  md VARCHAR(128)
);

2.2 php查询数据库

<?php
//data/products/getProductsByKw.php
header("Content-Type:application/json");
require_once("../init.php");

//接收搜索关键词
@$kw=$_REQUEST["kw"];

//子查询图片,选取1张
$sql="SELECT pid, title, price, (select md from xxx_product_details_pic where pid=pid limit 1) as pic FROM `xxx_product_details` ";

//搜索查询
if($kw!=null){  
    $kws=explode(" ",$kw);  //按空格切割
    for($i=0;$i<count($kws);$i++){
        $kws[$i]=" title like '%$kws[$i]%' ";
        //组成sql模糊条件查询语句的关键词
    };
    $where=implode(" and ",$kws);  
    //用and拼接sql语句
    $sql.=" where $where ";
    //拼接sql语句,最好前后都留出空格
};
$result=mysqli_query($conn,$sql);
$rows=mysqli_fetch_all($result,1); 

//分页
@$pno=$_REQUEST["pno"];; //第几页
if($pno==null) $pno=1; //默认第一页
$psize=9;
$count=count($rows);  //获得总数
//$rows不只9条,后面的页面要再拼limit查询
$sql.=" limit ".(($pno-1)*$psize).",$psize "; //跳过多少个,传多少个
$result=mysqli_query($conn,$sql);
$rows=mysqli_fetch_all($result,1);
$output=[
    "pno"=>$pno, //第几页,页码
    "psize"=>$psize,  //每页多少个
    "count"=>$count,  //总数
    "pcount"=>ceil($count/$psize),  //ceil()上取整
    "data"=>$rows
];
echo json_encode($output);

猜你喜欢

转载自blog.csdn.net/weixin_38840741/article/details/80055842