使用标签执行图像搜索

时间:2014-03-18 09:27:20

标签: php mysql sql database laravel

您好我有一个数据库但似乎无法想出在我的项目中搜索图像的技术我的数据库结构如下所示。

图像表

image_id(PK)|类别|拇指|预览|作者

图片标签表

img_id(FK)| TAG_NAME

整个想法是当用户填写文本框并点击进入时,我的php脚本使用explode函数将请求的值通过white-space转换为数组,然后在进行搜索时循环遍历每个找到的值在数据库(图像标签表)上,标签名称的值类似于请求,并连接图像表,其中(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)));

这是i var dump时的输出。

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [img_id] => 8045eb05de1f6b72824f2bfd2fc972c1
                    [tag_name] => Fine girls
                    [image_id] => 8045eb05de1f6b72824f2bfd2fc972c1
                    [category] => Family
                    [license] => Limited Utility (LU)
                    [author] => Daniel Barde
                    [thumb] => assets/downloads/img/thumb/2413759e3bdebf51b8bf215bc82018d4_thumb.jpg
                    [prv] => assets/downloads/img/prv/00eead497c552ab309ab66294cf5c758_P.jpg
                    [date_uploaded] => 01 - 23 - 2014
                    [time_uploaded] => 1390517578
                    [search_id] => 1390513134
                    [usage_policy] => 
                )

            [1] => stdClass Object
                (
                    [img_id] => c57d2e6f501670487fb5a5e2a016b5c1
                    [tag_name] => Fine girls
                    [image_id] => c57d2e6f501670487fb5a5e2a016b5c1
                    [category] => Fashion
                    [license] => Exclusive Utility (E
                    [author] => Daniel Barde
                    [thumb] => assets/downloads/img/thumb/c31598650ec51e6dd5725b2711920e91_thumb.jpg
                    [prv] => assets/downloads/img/prv/fa1872139b4f53a840e94d7ceca1911e_P.jpg
                    [date_uploaded] => 01 - 25 - 2014
                    [time_uploaded] => 1390657236
                    [search_id] => 1390652792
                    [usage_policy] => 
                )

        )

    [2] => Array
        (
            [0] => stdClass Object
                (
                    [img_id] => dfc7ec5aae7ce3b4397c57d4167b6417
                    [tag_name] => legs
                    [image_id] => dfc7ec5aae7ce3b4397c57d4167b6417
                    [category] => Lifestyle
                    [license] => Broad Utility (BU)
                    [author] => Lifestyle
                    [thumb] => assets/downloads/img/thumb/97f4517f6d5bdad880151d940da638d6_thumb.jpg
                    [prv] => assets/downloads/img/prv/fb7402b93ce27fe6e93e5578571e02fe_P.jpg
                    [date_uploaded] => 01 - 25 - 2014
                    [time_uploaded] => 1390656768
                    [search_id] => 1390652324
                    [usage_policy] => 
                )

        )

)

这是我视图中的代码。

 @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

1 个答案:

答案 0 :(得分:1)

以下是我要做的事情:

 @if(!empty($imgs))
    @foreach($imgs as $tag)
        @foreach($tag as $image)
        <div class="span3 transition metal">
            <figure class="top-img">
                <img src="{{$backend_url}}{{$image->thumb}}" alt="{{$image->category}}" id='img{{$image->image_id}}'>
                <figcaption class="img-meta">
                    <div class="row-fluid">
                        <div class="span8">
                            <a href="{{$base_url}}image/{{$image->search_id}}" class="img-id">#{{$image->search_id}}</a>
                            <a href="#" class="img-tags">{{$image->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='{{$image->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 -->
        @endforeach
    @endforeach
 @endif

如果这样做,则意味着您正在跳过两个循环中的一个。请注意我将for更改为foreach声明的方式;我不认为自己是一名经验丰富的编码员,但我喜欢让变量更具可读性,而不是写$imgs[$i][$j]->something