求正確SQL的寫法。

來源:互聯網
上載者:User
關鍵字 php mysql

1.問題:我一直不清楚一個SQL算出一個特定結果的寫法,想向大神請教

2.代碼:

SELECT tb.*,tbc.`comment` from blog_tinyblog AS tb,blog_tbcomment AS tbc where tb.user_id=tbc.user_id AND                    tb.num=tbc.now_numgroup by tbc.num_tiny_blog

我寫的SQL是這樣的,結果

可這並不是我想要的結果,我希望去除重複,將comment儲存為一個數組,成為只有一條結果的形式,請大神赤腳。也許可能會說用 distinct,但是不行
目的:我想寫個微博評論系統 【現在是想顯示出每條微博對應的評論】

回複內容:

1.問題:我一直不清楚一個SQL算出一個特定結果的寫法,想向大神請教

2.代碼:

SELECT tb.*,tbc.`comment` from blog_tinyblog AS tb,blog_tbcomment AS tbc where tb.user_id=tbc.user_id AND                    tb.num=tbc.now_numgroup by tbc.num_tiny_blog

我寫的SQL是這樣的,結果

可這並不是我想要的結果,我希望去除重複,將comment儲存為一個數組,成為只有一條結果的形式,請大神赤腳。也許可能會說用 distinct,但是不行
目的:我想寫個微博評論系統 【現在是想顯示出每條微博對應的評論】

我來打擊一下你:

  1. 你的資料庫設計有些問題。建議在做東西的時候將mysql相關的書看一下。(關聯用num?)

  2. GROUP BY的用法

  3. sql語句查詢的時候大寫會提高一絲絲效率,但是你這樣關鍵字大小寫混合就不要用了

  4. select tb.*,tbc.comment
    from blog_tinyblog as tb,blog_tbcomment as tbc
    where tb.num=tbc.num_tiny_blog

  5. 如果說上面的這些都能夠忍受的話,那我就只能拿你問問題的格式來說事兒了 排版亂,邏輯亂 而且你還用圖片,難道讓我們敲上去試試?

大部分ORM一般有兩種方式解決此類問題:

  1. 採用的 Lazy Load 方式,其實原理很簡單:就是取兩次,第一次取blog,第二次取blog對應的comment,只不過第二次取的操作順延強制。

  2. 第二種就是題主這種一次查詢的方式,只是ORM會根據查詢的結果映射成你想要的那種形式(單個Blog對象中包含對應的Comment列表)。

所以綜上,如果題主正在使用一種ORM工具,一般都包含這兩種方式的處理;如果沒有使用任何ORM,那題主需要自己實現一個對應的演算法(其實就是一個類似reduce的演算法)。

  1. 我沒看懂你的意思。

  2. 你想要做什麼。

  3. 首先你這全連結查詢一般是沒必要的。

  4. 再者沒有聚集合函式你用分組沒有什麼意義。

最佳方案是只擷取微博和評論數就行了,具體的評論可以用ajax去取,沒必要一次取出來,這樣壓力比較大。
如果你一定要一次取出來可以考慮group_concat這個函數,具體去查mysql手冊,但是不推薦,如果評論很多的話這個效率會非常低甚至產生錯誤。

此外你的表設計也不合理。比如第幾條微博,第幾條評論,無評論 這三種注釋代表的欄位根本沒用,使用者刪微博或者刪評論的時候你也要在多條記錄上維護相應的資料,麻煩死了。微博表有一個total_comments欄位就足夠了。至於到底是第幾條,顯示的時候自然就知道了,序號肯定是 (頁碼-1)*每頁顯示的記錄數 + 當前頁的第幾行,所以沒必要放在資料庫裡面。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.