【发布时间】:2014-03-18 09:27:20
【问题描述】:
您好,我有一个数据库,但似乎无法想出在我的项目中搜索图像的技术,我的数据库结构如下所示。
图片表
image_id (PK) |类别 |拇指 |预览 |作者
图片标签表
img_id (FK) |标签名
整个想法是当用户填写文本框并点击回车时,我的 php 脚本使用explode函数将请求的值通过空格转换为数组,然后在搜索时遍历每个找到的值在数据库(图像标签表)上找到一个标签名称,其值类似于请求并加入图像表,其中 (FK) 等于 (PK)。
我实际上正在寻找一种更有效和可行的方法来做我的
这是我的代码(php/query)。
$keywords = Input::get("keywords");
$keywordsExploded = explode(" ", $keywords);
for ($i=0; $i < count($keywordsExploded); $i++) {
$searchKey = $keywordsExploded[$i];
$search = DB::table('image_tags')
->leftJoin('images', 'images.image_id', '=', 'img_id')
->where('tag_name','like','%'.$searchKey.'%')
->get();
$imageResult[] = $search;
}
$imageResult = array_map('unserialize', array_unique(array_map('serialize', $imageResult)));
这是我 var dump 时的输出。
大批 ( [0] => 数组 ( [0] => 标准类对象 ( [img_id] => 8045eb05de1f6b72824f2bfd2fc972c1 [tag_name] => 好女孩 [image_id] => 8045eb05de1f6b72824f2bfd2fc972c1 [类别] => 家庭 [许可证] => 有限效用 (LU) [作者] => 丹尼尔·巴德 [拇指] => 资产/下载/img/thumb/2413759e3bdebf51b8bf215bc82018d4_thumb.jpg [prv] => 资产/下载/img/prv/00eead497c552ab309ab66294cf5c758_P.jpg [date_uploaded] => 01 - 23 - 2014 [time_uploaded] => 1390517578 [search_id] => 1390513134 [使用政策] => ) [1] => 标准类对象 ( [img_id] => c57d2e6f501670487fb5a5e2a016b5c1 [tag_name] => 好女孩 [image_id] => c57d2e6f501670487fb5a5e2a016b5c1 [类别] => 时尚 [许可证] => 专有实用程序(E [作者] => 丹尼尔·巴德 [拇指] => 资产/下载/img/thumb/c31598650ec51e6dd5725b2711920e91_thumb.jpg [prv] => 资产/下载/img/prv/fa1872139b4f53a840e94d7ceca1911e_P.jpg [date_uploaded] => 01 - 25 - 2014 [time_uploaded] => 1390657236 [search_id] => 1390652792 [使用政策] => ) ) [2] => 数组 ( [0] => 标准类对象 ( [img_id] => dfc7ec5aae7ce3b4397c57d4167b6417 [tag_name] => 腿 [image_id] => dfc7ec5aae7ce3b4397c57d4167b6417 [类别] => 生活方式 [许可证] => 广泛效用 (BU) [作者] => 生活方式 [拇指] => 资产/下载/img/thumb/97f4517f6d5bdad880151d940da638d6_thumb.jpg [prv] => 资产/下载/img/prv/fb7402b93ce27fe6e93e5578571e02fe_P.jpg [date_uploaded] => 01 - 25 - 2014 [time_uploaded] => 1390656768 [search_id] => 1390652324 [使用政策] => ) ) )这是我认为的代码。
@if(!empty($imgs))
@for ($i=0; $i < count($imgs) ; $i++)
<div class="span3 transition metal">
<figure class="top-img">
<img src="{{$backend_url}}{{$imgs[0][$i]->thumb}}" alt="{{$imgs[0][$i]->category}}" id='img{{$imgs[0][$i]->image_id}}'>
<figcaption class="img-meta">
<div class="row-fluid">
<div class="span8">
<a href="{{$base_url}}image/{{$imgs[0][$i]->search_id}}" class="img-id">#{{$imgs[0][$i]->search_id}}</a>
<a href="#" class="img-tags">{{$imgs[0][$i]->category}}</a>
</div>
<div class="span4">
<a href="#" class="btn download-btn"><i class="icon-download"></i></a>
</div>
</div>
</figcaption> <!-- end img-meta -->
<div class="roll-over" data-source='{{$imgs[0][$i]->image_id}}'>
<a href="#" class="btn"><span class="bucket"><i class='icon-shopping-cart'></i></span></a>
</div> <!-- end roll-over -->
</figure> <!-- end top-img -->
</div><!-- end span3 -->
@endfor
@endif
【问题讨论】:
-
首先向我们展示您当前的代码/查询,然后我们将看看可以做些什么来改进它
-
你使用的这个标签是什么样子的?
-
@Marcel 标签是从用户输入中获取的字符串,然后根据管理员已经为每个图像输入的标签在数据库中搜索
-
你所说的“更有效和可行的方法”是什么意思?你想做什么你现在不能做?
-
@clod986 此方法将返回的数据数组存储在另一个数组($imageResult[])中,因此难以循环,此外,此方法不允许我显示所有找到的记录,它只显示前两个。
标签: php mysql sql database laravel