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);