我如何在mysql数据库中搜索多个表?

问题描述 投票:0回答:1

该场景是,我在PHP中具有搜索功能,尽管问题是它只能搜索一个表。我想要的是能够同时在两个表中搜索。

这是我的初始代码,record.php,此搜索功能只能搜索一个表。

<?php

class Record{
private $conn;
private $table_name_1 = "name_of_table_1";
private $table_name_2 = "name_of_table_2";

//value to be searched in table 1
public $name;
//value to searched in table 2

public $age;

public function __construct($db){
    $this->conn = $db;
}

//search function
public function search($search_term, $from_record_num, $records_per_page){
$query = "SELECT name FROM " . $this->table_name_2 . " WHERE name LIKE ? OR ORDER BY name ASC LIMIT ?, ?";
 $stmt = $this->conn->prepare($query);
 $search_term = "%{$search_term}%";
 $stmt->bindParam(1, $search_term);
 $stmt->bindParam(11, $from_record_num, PDO::PARAM_INT);
 $stmt->bindParam(12, $records_per_page, PDO::PARAM_INT);

 $stmt->execute();
 return $stmt;
 }

 public function countAll_BySearch($search_term){

 $query = "SELECT COUNT(*) as total_rows FROM " . $this->table_name_2 . " WHERE name LIKE ? OR";
 $stmt = $this->conn->prepare($query);
 $search_term = "%{$search_term}%";
  $stmt->execute(array($search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row['total_rows'];
}

    function readAll($from_record_num, $records_per_page){
    $query = "SELECT name FROM " . $this->table_name_2 . " ORDER BY name ASC LIMIT {$from_record_num}, {$records_per_page}";
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();
    return $stmt;
}
}
?>

这是与搜索功能search.php相关的另一代码。

<?php
include_once 'database.php';
include_once 'record.php';
$database = new Database();
$db = $database->getConnection();
$record = new Record($db);
$search_term=isset($_GET['s']) ? htmlspecialchars($_GET['s'], ENT_QUOTES) : '';

$page_title = "You searched for \"{$search_term}\"";
$stmt = $record->search($search_term, $from_record_num, $records_per_page);
$page_url="search.php?s={$search_term}&";
$total_rows=$record->countAll_BySearch($search_term);
//for viewing
include_once "read.php";
?>

以及另一个用于显示的代码,read.php。

<?php
include_once 'record.php';
if($total_rows>0){
   while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){

        extract($row);
        echo $name;
}
} else {
 echo "no record";
}

?>

php mysql search
1个回答
0
投票

您可以使用全部并集

这样,您将获得具有表特定计数的几行

"SELECT COUNT(*) as total_rows 
FROM " . $this->table_name_2 . " 
WHERE name LIKE ? 
union all 
SELECT COUNT(*)  
FROM " . $this->table_name_3 . " 
WHERE name LIKE ? 
...
union all 
SELECT COUNT(*) 
FROM " . $this->table_name_n . " 
WHERE name LIKE ? 
";

这样,您将获得所有表的总数

" select sum(total_rows) 
from ( 
SELECT COUNT(*) as total_rows 
FROM " . $this->table_name_2 . " 
WHERE name LIKE ? 
union all 
SELECT COUNT(*)  
FROM " . $this->table_name_3 . " 
WHERE name LIKE ? 
...
union all 
SELECT COUNT(*) 
FROM " . $this->table_name_n . " 
WHERE name LIKE ? 
) t
";

无论如何都要小心在sql代码中使用php var ..您有进行sql注入的风险。因此请在使用前对var内容进行适当的清理

© www.soinside.com 2019 - 2024. All rights reserved.