PHP 乙個sql問題

2021-09-27 05:33:01 字數 1512 閱讀 5675

這兩天遇到乙個sql問題跟大家分享一下,其中的邏輯是這樣的。

有乙個會員發布的資訊表,在這個表裡有會員id,資訊id,建立時間等字段。

現在有乙個需求是讀出來這個表裡的最新的16條資訊,這是其中的乙個條件,但是為了防止

會員刷屏每個會員的最新的資訊最多只能顯示3條。

也就是2個條件:

條件1:查詢表裡最新的16條

條件2:每個會員最多出現三條

我就開始構思sql語句,試了半天也沒能實現。後來想貌似一句sql實現不了,但是我多條sql也沒很理想的實現。

哎,無奈了。。。。讀出來用程式foreach吧,下面是我實現的方法,一大堆的程式**。。。

php**:

函式:  get_data函式返回乙個查詢完後的結果,陣列型別       member_info16函式是處理結果集陣列

表字段:guid 主鍵-自動增長,subtype 資訊型別,owner_guid 會員id,time_created 建立時間

變數:  $results 是最後結果

$results    = get_data("select guid,subtype,owner_guid,time_created from itv_entities as a where subtype in (11,15,17) order by time_created desc limit 30");    //先查詢出來30條資訊

$results_t    = member_info16($results);    //經過member_info16函式,返回guid陣列

$count_t    = count($results_t);        //獲得經過篩選後剩餘多少條資訊

$resutlts_t2    = array();

if($count_t<16) order by time_created desc limit ");

$resutlts_t2    = member_info16($results_two);

}elseif($count_t>16) }

$results_value    = implode(',',array_merge($results_t,$resutlts_t2));    //合併2個陣列,得到最後的結果

$results    = null;

$results    = get_data("select guid,subtype from itv_entities where guid in () order by time_created desc"); //傳給最後的sql,直接讀取

function member_info16($results) }

foreach ($result_s as $var) }

return $results_t;                    //返回陣列 }

總結:雖然是用程式的方式實現了,但還不是很理想,查詢了至少2次資料庫再加上foreach,速度上有點慢,顯然不是明智的解決辦法

不過對於資料量少的可以湊活著用。。。

乙個有趣的SQL問題。

有朋友近來要我幫忙解決乙個 問題,問題描述 有表,表有3個字段 f1,f2,f3,其中,每個欄位中都可能出現1 9之間的9個數字,現要統計出整個表中1 9各出現的次數。如 f1 f2f311 2123 212在上例中 1 出現了4次,2 出現了4次,3 出現了1次。當然,這個 問題是要求盡可能的用 ...

乙個sql問題的解決

表內容 2005 05 09 勝 2005 05 09 勝 2005 05 09 負 2005 05 09 負 2005 05 10 勝 2005 05 10 負 2005 05 10 負 輸出 比賽時間 勝 負 2005 05 09 2 2 2005 05 10 1 2 自己完成建表語句,插入語句...

SQL 記乙個查詢問題

有部門表和部門管理員表,部門表比較常規,反常的是部門管理員表。這張表是etl整理出來的表,包含各部門的主管 秘書 機要員資訊等等。下面把關鍵字段列出來 部門表,department dept code dept name 50040001 部門150040002 部門250040003 部門3部門管...