SetServer('127.0.0.1',10312);$sphinxapi->SetConnectTimeout(3);$sphinxapi->SetMatchMode(SPH_MATCH_BOOLEAN);$sphinxa" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

在項(xiàng)目中靈活運(yùn)用合適的排序方法(Sphinx,SQL,Y

系統(tǒng) 2344 0

本文總結(jié)一下最近項(xiàng)目中用到的各種排序方法,如需轉(zhuǎn)載,請(qǐng)注明文章出處 微笑


1,Sphinx排序

?

?

    ? ? ? ? Yii::import('ext.SphinxClient');

        $sphinxapi = new SphinxClient();

        $sphinxapi->SetServer('127.0.0.1', 10312);

        $sphinxapi->SetConnectTimeout(3);

        $sphinxapi->SetMatchMode(SPH_MATCH_BOOLEAN);

        $sphinxapi->SetArrayResult(true);

        $sphinxapi->SetGroupBy('type', SPH_GROUPBY_ATTR,"@count desc");

        $sphinxapi->SetLimits(0, 9999, 10000);

        $result = $sphinxapi->Query('', 'main;delta');

        unset($sphinxapi);
  


其中

     SPH_GROUPBY_ATTR,"@count desc"
  

指定了按照 @count 降序排列

?


2,SQL排序(讓某一列根據(jù)指定的數(shù)組排序,而不是本表字段)

???? ?????

有時(shí)候我們需要從數(shù)據(jù)庫(kù)中找到的數(shù)據(jù)按照我們已有的數(shù)組順序進(jìn)行排列,而不是簡(jiǎn)單的根據(jù)數(shù)據(jù)表字段進(jìn)行 order by

比如:

我們有一個(gè)數(shù)組 $IDArray=array(13,24,2,23,21,10,22,12,26,27,19,20,8,14,25,9,11,1,6);

現(xiàn)在需要從shop表中查找19個(gè)數(shù)據(jù),并且讓shop的id根據(jù)$IDArray中的順序來(lái)排列

可以使用, find_in_set (id,'************')來(lái)實(shí)現(xiàn)


?

    SELECT id, name FROM shop WHERE id IN(13,24,2,23,21,10,22,12,26,27,19,20,8,14,25,9,11,1,6) order by find_in_set(id,'13,24,2,23,21,10,22,12,26,27,19,20,8,14,25,9,11,1,6')
  


當(dāng)然,我們遇到的常常是動(dòng)態(tài)的情況,這是可以用數(shù)組->字符串的法寶 join

?

?

    
      $sql = "SELECT id, name FROM shop WHERE id IN(".join(',', array_keys($IDARRAY)).") order by  find_in_set(id,'".join(',', array_keys($IDARRAY))."') ";



$rawDataAll = Yii::app()->db->createCommand($sql)->queryAll();
    
  


?

關(guān)于 find_in_set (id,'************') ,的用法擴(kuò)展可以

參考: mysql中替代charindex的函數(shù)substring_index、find_in_set


3,Array數(shù)組根據(jù)自己的任意元素進(jìn)行排序


把這個(gè)方法封裝成一個(gè)類,在Yii項(xiàng)目中隨意調(diào)用

?

    ArrayHelper::array_sort($bodyArray, 'count', 'desc')
  

?

?

    <?php

class ArrayHelper extends CController

{

    public function array_sort($arr, $keys, $type='asc')

    {

        $keysvalue = $new_array = array();

        foreach($arr AS $k=>$v)

        {

            $keysvalue[$k] = $v[$keys];

        }

        if($type == 'asc')

        {

            asort($keysvalue);

        }

        else

        {

            arsort($keysvalue);

        }

        reset($keysvalue);

        foreach ($keysvalue as $k=>$v)

        {

            $new_array[$k] = $arr[$k];

        }

        return $new_array;

    }

}

?>
  



在項(xiàng)目中靈活運(yùn)用合適的排序方法(Sphinx,SQL,Yii,數(shù)組)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!?。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 鸡西市| 明光市| 黎川县| 沈丘县| 依安县| 泰宁县| 镇巴县| 陇西县| 黔东| 临夏市| 河池市| 拜泉县| 双桥区| 汉中市| 定陶县| 苗栗县| 福建省| 彭阳县| 吉水县| 赤水市| 商丘市| 西乡县| 贺兰县| 临邑县| 双桥区| 红原县| 白银市| 通州市| 大悟县| 忻城县| 项城市| 镇江市| 内丘县| 临夏市| 眉山市| 鹤庆县| 莲花县| 噶尔县| 金坛市| 旬邑县| 婺源县|