国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

APP首頁(yè)顯示100篇文章,每篇文章顯示最新3條評(píng)論。要求速度最快,效率最優(yōu),大家平常怎么解決的?

問(wèn)題描述

最近一直思考這個(gè)問(wèn)題,項(xiàng)目數(shù)據(jù)都是百萬(wàn)級(jí)別的,百度了很多方案,貌似沒(méi)有最好的方案

1:循環(huán)查庫(kù)肯定不行了
2:鏈表查詢(行嗎)?
3:laravel ORM 模型(行嗎)?貌似也是取所有評(píng)論數(shù)據(jù),然后take切斷

不知道子查詢行不行,外層查詢100篇文章,子查詢最新3條評(píng)論,然后CONCAT_WS或者GROUP_WS連接評(píng)論

1388 12 0
12個(gè)回答

Dalong

Db::table('table')->limit(100)->select();

不行嗎

ysxpark

作緩存定時(shí)更新吧

nitron

百萬(wàn)級(jí)能有多大,就算用1最壞情況也就是1+100個(gè)查詢,DB索引和緩存得當(dāng)這都不是問(wèn)題

  • PHP甩JAVA一條街 2023-04-23

    哈哈, 上個(gè)項(xiàng)目, 才幾個(gè)月600w條了

  • nitron 2023-04-23

    基礎(chǔ)消耗是擺在那里(假定單條查詢?nèi)甲吡怂饕?,就算你怎么個(gè)去考慮如何寫,最終的基礎(chǔ)消耗都差不多,與其在這個(gè)地方扣細(xì)節(jié)(我看你已經(jīng)糾結(jié)了好多天了),不如在其他的地方考慮如何去降低使用基礎(chǔ)消耗的頻次(比如緩存)

    換我就想都不用想直接第一種+緩存簡(jiǎn)單直接,別看它土但是有效啊,花時(shí)間琢磨些奇技淫巧最后發(fā)現(xiàn)浪費(fèi)了時(shí)間卻沒(méi)卵用..

    你這個(gè)是文章,不是高頻交易,實(shí)時(shí)性沒(méi)有那么重要
    laravel ORM 偽代碼

    $atricles = db::table('article')->where(xxx)->orderby(xxx)->->limit(100)->get()->each(function($item){
        $tiem->comments = db::table('comments')->where(xxx)->orderby(xxx)->->limit(3)->get();
    });
    
  • PHP甩JAVA一條街 2023-04-23

    循環(huán)查庫(kù)啊

  • nitron 2023-04-24

    是啊,有什么問(wèn)題么?

  • nitron 2023-04-25

    不要覺(jué)得我這個(gè)土,主表38個(gè)字段,2500萬(wàn)數(shù)據(jù),關(guān)聯(lián)表41個(gè)字段,6600萬(wàn)數(shù)據(jù),都走索引的情況下,用上面的方式執(zhí)行時(shí)間100ms左右

不敗少龍

laravel ORM 中的with去查詢?cè)u(píng)論呢?

  • PHP甩JAVA一條街 2023-04-23

    我用的就是這個(gè)查詢, 好像獲取評(píng)論也是一次性獲取所有的

  • 不敗少龍 2023-04-23

    可以在with的方法里面可以用條數(shù)限制

  • PHP甩JAVA一條街 2023-04-23

    with 里面有個(gè)take, 好像是先拿出所有的, 然后截?cái)?/p>

小W

1.App一次性無(wú)法顯示100條,可以做成滾動(dòng)加載模式
2.異步加載每條的評(píng)論

關(guān)鍵看數(shù)據(jù)庫(kù)表設(shè)計(jì),以及app產(chǎn)品的設(shè)計(jì)。

muyu

sql或者orm層面沒(méi)有什么好的方案,可以如果是mysql8,可以使用窗口函數(shù)row_number和over試試,但是緩存是最佳的方案

brookeov
with(['comments' => function($query){
    $query->limit(3);
}])
  • 暫無(wú)評(píng)論
ab0029

使用Laravel ORM如下

$articles = Article::limit(100)->get();
$query = $articles->map(
    fn($query) => $query->comments()->limit(3)
)->reduce(
    fn($carry, $query) => $carry ? $carry->unionAll($query) : $query
);

$comments = $query->get();
  • ab0029 2023-04-24

    手動(dòng)拼接成union all 語(yǔ)句,然后一條去sql去數(shù)據(jù)庫(kù)查詢,其他條件自己拼接即可

這多明顯,app顯示滿根本顯示不了100條,你這做個(gè)分頁(yè),下拉加載就行了

  • 暫無(wú)評(píng)論
mon

不考慮反查最新評(píng)論,獲取300條最新評(píng)論的還有關(guān)聯(lián)的文章記錄,在用PHP整合一下就完事了么?[狗頭]

  • 暫無(wú)評(píng)論
縫合

首先,需要在文章表和評(píng)論表之間建立一對(duì)多的關(guān)聯(lián)關(guān)系,即在評(píng)論表中引入一列文章 id(article_id),表示評(píng)論所屬的文章。

假設(shè)文章表名為 article,具有 article_id、title、content 等列;評(píng)論表名為 comment,具有 comment_id、article_id、content 等列。

然后,使用以下 SQL 語(yǔ)句來(lái)查詢文章和對(duì)應(yīng)的最新3條評(píng)論:

SELECT a.title, a.content, c.content
FROM 
    (SELECT article_id, title, content FROM article LIMIT 100) a 
    LEFT JOIN 
    (
        SELECT article_id, content 
        FROM comment c1 
        WHERE (
            SELECT COUNT(*) 
            FROM comment c2 
            WHERE c2.article_id = c1.article_id AND c2.comment_id >= c1.comment_id
        ) <= 3
    ) c ON a.article_id = c.article_id 
ORDER BY a.article_id DESC, c.comment_id ASC

首先,使用子查詢獲取最新發(fā)布的100篇文章,限制顯示數(shù)量不超過(guò)100篇,以提高查詢效率。
然后,使用左連接將文章和評(píng)論合并起來(lái),并使用子查詢獲取每篇文章的最新3條評(píng)論。
最后,按照文章 id 降序排列,評(píng)論 id 升序排列,確保結(jié)果集中的評(píng)論是最新的前三條。
需要注意的是,以上 SQL 語(yǔ)句僅供參考,具體實(shí)現(xiàn)還需要針對(duì)實(shí)際情況進(jìn)行調(diào)整和優(yōu)化。同時(shí),還需要注意索引和緩存的使用以提高查詢效率。

  • 暫無(wú)評(píng)論
小Z先生

查詢出文章然后循環(huán)拼接查詢?cè)u(píng)論的sql union all

如:

( SELECT id,article_id, content FROM comment where id =1 limit 3)
union all
( SELECT id,article_id, content FROM comment where id =2 limit 3)
  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??