最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql查詢(xún)?nèi)绾稳サ舳嘤嗔?/h1>
 更新時(shí)間:2024年01月11日 15:49:29   作者:拿命搏未〃來(lái)  
這篇文章主要介紹了mysql查詢(xún)?nèi)绾稳サ舳嘤嗔銌?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mysql查詢(xún)?nèi)サ舳嘤嗔?/h2>

mysql 查詢(xún)decimal去掉多余零 0+cast(field as char)

thinkphp指定查詢(xún)字段方法增加$format參數(shù)

/**
     * 指定查詢(xún)字段
     * @access public
     * @param mixed $field 字段信息
     * @param mixed $format 需要去掉多余0的 decimal字段
     * @return $this
     */
    public function field($field,$format=null)
    {
        if (empty($field)) {
            return $this;
        } elseif ($field instanceof Raw) {
            $this->options['field'][] = $field;
            return $this;
        }

        if (is_string($field)) {
            if (preg_match('/[\<\'\"\(]/', $field)) {
                return $this->fieldRaw($field);
            }

            $field = array_map('trim', explode(',', $field));
        }

        if (true === $field) {
            // 獲取全部字段
            $fields = $this->getTableFields();
            $field  = $fields ?: ['*'];
        }

        if (isset($this->options['field'])) {
            $field = array_merge((array) $this->options['field'], $field);
        }
        if ($format) {
            $castField = [];
            if(is_string($format)) $format = explode(',',$format);
            if(is_array($format)){
                foreach($format as $v){
                    $asField = str_replace(".","_",$v);
                    $castField[] = '0+cast('.$v.' as char) AS '.$asField;
                }
            }
            $field = array_merge($field,$castField);
        }
        $this->options['field'] = array_unique($field);
        return $this;
    }

mysql查詢(xún)常見(jiàn)問(wèn)題

一、先排序后分組

1、MySQL版本5.6

首先order by然后group by

SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    ( SELECT id, chat_id, content, create_time FROM im_chat_message ORDER BY create_time DESC ) a 
GROUP BY
    chat_id 
ORDER BY
    create_time DESC

2、MySQL版本5.7

MySQL5.7對(duì)子查詢(xún)進(jìn)行了優(yōu)化,認(rèn)為子查詢(xún)中的order by可以進(jìn)行忽略,只要Derived table里不包含如下條件就可以進(jìn)行優(yōu)化:UNION clause、GROUP BY、DISTINCT、Aggregation、LIMIT or OFFSET

SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    ( SELECT id, chat_id, content, create_time FROM im_chat_message ORDER BY create_time DESC LIMIT 999999999 ) a 
GROUP BY
    chat_id 
ORDER BY
    create_time DESC

3、MySQL版本>=8.0

采用

ROW_NUMBER() over ( PARTITION BY chat_id ORDER BY create_time DESC )
SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    (
    SELECT
        id,
        chat_id,
        content,
        create_time,
        ROW_NUMBER() over ( PARTITION BY chat_id ORDER BY create_time DESC ) AS rn 
    FROM
        im_chat_message 
    ORDER BY
        create_time DESC 
    ) a 
WHERE
    rn =1

二、order by limit導(dǎo)致分頁(yè)出現(xiàn)重復(fù)數(shù)據(jù)

從 MySQL 5.6 版本開(kāi)始,優(yōu)化器在使用 order by limit 時(shí)做了優(yōu)化,導(dǎo)致排序字段沒(méi)有使用索引時(shí)使用堆排序。

堆排序是不穩(wěn)定的,多次排序后,各個(gè)數(shù)的相對(duì)位置發(fā)生了變化。

解決措施有兩種方式:

1、排序字段加上索引。

2、在 order by 排序字段里,添加有索引的字段,比如主鍵ID。在排序時(shí)可以保證順序穩(wěn)定。

三、新增數(shù)據(jù)導(dǎo)致分頁(yè)出現(xiàn)重復(fù)數(shù)據(jù)

新增數(shù)據(jù)導(dǎo)致數(shù)據(jù)總量發(fā)生了變化。

解決措施如下:

查詢(xún)出當(dāng)頁(yè)數(shù)據(jù)后,記錄本次拉取位置。

下次請(qǐng)求時(shí),將上次獲取的拉取位置傳給后端,后端從該拉取位置開(kāi)始分頁(yè)。

 WHERE
   1 =1
   <if test="null != query.minId">
      and id &lt; #{query.minId}
   </if>
 LIMIT #{query.size}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

嘉峪关市| 贵德县| 基隆市| 平南县| 澄江县| 湘乡市| 闵行区| 扶风县| 英超| 绥芬河市| 八宿县| 阿合奇县| 沾益县| 邯郸县| 漳州市| 策勒县| 穆棱市| 昌宁县| 黄山市| 东港市| 周宁县| 琼结县| 鄂尔多斯市| 榆社县| 泽普县| 秭归县| 乌审旗| 临邑县| 丹凤县| 徐闻县| 龙井市| 宣化县| 皋兰县| 榆树市| 广东省| 邳州市| 成武县| 广东省| 大化| 桂平市| 吴江市|