我如何从两个表中搜索数据,它们不相关

我正在尝试构建一个搜索框以从 2 个表中找出相似的标题。


艺术表- id 标题类型


赠款表- id Title Type


现在我只能显示 grants 表中的数据,如果搜索与标题类似的内容,我如何显示两个表的结果?


模型


function searchResult($keyword)

{

  $this->db->like('title',$keyword);

  $this->db->or_like('open_to',$keyword);

$this->db->from('v_grants');

$query  =   $this->db->get();

  return $query->result();

}

控制器


function searchResult() {

    $keyword    =   $this->input->post('keyword');

    $data['results']    =   $this->products_model->searchResult($keyword);

    $this->load->view('searchresults.php', $data);

}

看法


<form class="form-inline my-2 my-md-0" action="<?php echo site_url('starter/searchResult');?>" method 

= "post">

  <input class="form-control" type="text" name = "keyword"/>


<br>

<table>

<?php if (count($results) > 0){

foreach($results as $row){ ?>


<table class="table">

<tr>

    <td><h2><a href="<?=  base_url()?>product/grantindividual/<?=$row->id?>"><?php echo $row->title?> 

</h2></a>  



</tr>


<?php   

}

}

else { ?>


<br>

<br>



<h1> No results found. </h1>


<?php 

}


?>


</table>


FFIVE
浏览 94回答 1
1回答

尚方宝剑之说

会有一些人会建议您进行单独的查询并合并结果集,因为这会减少脚本卷积。会有其他人赞成使用 UNION ALL 来组合两个表查询,因为他们更喜欢单次访问数据库或者你不需要在第一次 SELECT 之后为列添加别名(对于列名的情况不同)。我会满足您的要求,但要明白满足您的要求的方法不止一种。CodeIgniter 目前不提供 UNION 方法,因此您可以对活动记录做的最好(AFAIK)是编译两个 SELECT 查询并在调用内部执行 UNION query()。实际呈现的查询和结果集可能会略有不同,具体取决于您的数据库适配器——这种多功能性是 CodeIgniter 查询构建方法的一个特性。我包括一个额外的列 ( source),以便您可以在显示数据时做出明智的决定(关于超链接等)。否则,您可能会引用一个id值但不知道它id引用的是哪个表。代码:$this->db->select($this->db->escape('v_grants') . ' AS source, id, title, type');$this->db->from('v_grants');$this->db->like('title', $keyword);$this->db->or_like('open_to', $keyword);$vGrantsQuery = $this->db->get_compiled_select();$this->db->select($this->db->escape('art') . ', id, title, type');$this->db->from('art');$this->db->like('title', $keyword);$this->db->or_like('open_to', $keyword);$artQuery = $this->db->get_compiled_select();/*var_export([&nbsp; &nbsp; $this->db->query($vGrantsQuery . ' UNION ALL ' . $artQuery)->result(),&nbsp; &nbsp; $this->db->last_query()]);*/return $this->db->query($vGrantsQuery . ' UNION ALL ' . $artQuery)->result();ps Model 方法result()将生成一个空数组或一个对象数组。在您看来,您不需要count();只需检查if (!$result) {——这将告诉您结果集是否为空。
打开App,查看更多内容
随时随地看视频慕课网APP