首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >任意顺序的PHP搜索查询

任意顺序的PHP搜索查询
EN

Stack Overflow用户
提问于 2018-07-19 18:48:28
回答 1查看 67关注 0票数 1

我有一个功能搜索,它能够搜索多个关键字。例如,你的db中有'You are are‘,你可以通过搜索'You are’找到它,但当你搜索' Awesome‘时,它将不会返回任何内容。因此,如果你明白我的意思,基本上你只能按照数据库中相同的顺序进行搜索。希望你们能帮我解决这个问题。提前感谢!

控制器:

代码语言:javascript
复制
<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class VoorraadlijstenController extends Controller
{

    /**
     * @Route ("/voorraadlijst", name="voorraadlijst")
     */
    public function voorraadlijstHomepage(Request $request){

        //Variabelen
        $zoek = $request->get('q');
        $search = explode(" ", $request->get('q'));
        $em = $this->getDoctrine()->getManager();

        $waarde = '';

        foreach ($search as $key) {
            $waarde .= '%'.$key.'%';
        }

        $parameter = [];
        $parameters['query1'] = '%'.$zoek.'%';
        $parameters['query2'] = '%'.$waarde.'%';


        //Ophalen van data uit database.

        if ($search) {
                $voorraad = $em->createQuery('Select a FROM AppBundle:Voorraadlijst a WHERE a.artikelnummer LIKE :query1 OR a.omschrijving LIKE :query2 ORDER BY a.omschrijving ASC')
                ->setParameters($parameters);
            } 
        else {
                $voorraad = $em->createQuery('Select a FROM AppBundle:Voorraadlijst a ORDER BY a.omschrijving ASC');
            }

        //Verwijzing naar overzicht & en variabelen die hij meegeeft
        return $this->render('voorraadlijst.html.twig', [
            'voorraad' => $voorraad->getResult(),
            'q' => $zoek
        ]);
    }

}

?>

小枝:

代码语言:javascript
复制
{% extends 'layout/default.html.twig' %}

{% block content %}

    {#Style voor de wrapper#}

    <style>

        .wrapper {
        height:     130px;
        min-height: 150px
        margin:     10px;
        padding:    30px;
        }

        table {
          table-layout: fixed;
          zoom: 80%
        }

    {#Style voor de zoekformulier#}

        .zoekformulier{

        padding: 20px;
        margin-top: 20px;
        }


    </style>

     {#Heading#}

    <div class="wrapper" style="background-color:#E9ECEF">
        <div class="container">
            <h3 class="display-4"><center>Voorraadlijst week 29</center></h3>
        </div>
    </div>

    {#Zoekformulier#}

    <div class= "zoekformulier">
        <form>
            <input name="q" value="{{ q }}" placeholder="Artikelnummer of omschrijving" />
            <button type="submit">Zoeken</button>
        </form>
    </div>

    {#Tabellen, tr aanpassen, td laten staan#}

    <div class="container-fluid">
        <div class="row">
                <div class="col-md-12">
                <table class="table table-striped">
                    <thead>
                    <tr>
                        <th scope="col">Artikelnummer</th>
                        <th>Omschrijving</th>
                        <th>Adviesprijs</th>
                        <th>Nu beschikbaar</th>
                        <th>Eerste LEV Verwacht</th>
                        <th>Beschikbaar na eerste LEV</th>
                        <th>Tweede LEV Verwacht</th>
                        <th>Beschikbaar na tweede LEV</th>
                        <th>Derde LEV Verwacht</th>
                        <th>Beschikbaar na derde LEV</th>
                        <th>Vier de zomer %</th>
                        <th>Vier de zomer €</th>
                        <th>Opmerking</th>
                    </tr>
                    </thead>
                    <tbody>
                    {% for artikel in voorraad %}
                    {#Onderstaande wordt opgehaald vanuit je entiteit en die haalt het op uit je database. Niet aanpassen!#}
                    <tr>
                        <th scope="row">{{ artikel.artikelnummer }}</th>
                        <td>{{ artikel.omschrijving }}</td>
                        <td>{{ artikel.adviesprijs }}</td>
                        <td>{{ artikel.nuBeschikbaar }}</td>
                        <td>{{ artikel.eersteLevVerwacht }}</td>
                        <td>{{ artikel.beschikbaarNaEersteLev }}</td>
                        <td>{{ artikel.tweedeLevVerwacht }}</td>
                        <td>{{ artikel.beschikbaarNaTweedeLev }}</td>
                        <td>{{ artikel.derdeLevVerwacht }}</td>
                        <td>{{ artikel.beschikbaarNaDerdeLev }}</td>
                        <td>{{ artikel.kortingProcent }}</td>
                        <td>{{ artikel.kortingEuro }}</td>
                        <td>{{ artikel.opmerking }}</td>
                    </tr>
                    {% endfor %}
                    </tbody>
                </table>              
            </div>
        </div>
        <hr>
    </div>


{% endblock %}

我将研究一下ElasticSearch和queryBuilder。问题已结束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 05:56:35

尽管搜索引擎允许以不太复杂的方式来做这件事,但还是有SQL的方法:你可以使用RLIKE运算符而不是LIKE

基本查询将类似于SELECT * FROM tablename WHERE fieldname RLIKE 'you.*awesome'。请注意,RLIKE不使用任何索引(但在上面的特定代码中,LIKE也不会使用任何索引,因为表达式是以通配符%开头的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51420708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档