這兩天遇到乙個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部門管...