2012-09-20 30 views
2

好,大家好我有這個疑問顯示器隨機記錄,但不一樣的

$mysql = "select * from xxx where active = 1 order by Rand() limit $start,12"; 
mysql_query($mysql); 

一切偉大的工程至今。

我想要的是:當我按下一個按鈕(第2頁或第3頁等)來查看下面的12條隨機記錄,但不顯示我以前的頁面中的前12條隨機記錄!

謝謝大家! p.s對不起,我的英文不好!

+1

'ORDER BY RAND()'[應該避免像瘟疫一樣](http://stackoverflow.com/questions/6592751/why-dont-use-mysql-order-by-rand)除非你的表有100行或一些這樣的數字。 – Jon

+0

看起來像連續兩次隨機選擇相同記錄的概率太高。如果可能的話,你可能只需要更多的記錄。否則,您需要一些(相當笨拙的)跟蹤每個會話記錄的最後選定部分的機制等。如果您真的需要類似的東西,可以考慮將記錄範圍邏輯地分割成段(> = 12記錄),跟蹤會話中的最近段,並使用select中的limit子句從不同段中每次查詢。 –

回答

1

試着在數組中檢索你需要的數據,用PHP中的shuffle()對它進行隨機化,並用一些JQuery對結果進行分頁,它會很棒,只有一個查詢而不刷新。 ;)

+0

夥計們,我用這種方式檢索我的記錄: –

1

您可以跟蹤之前顯示的記錄'id s並將它們放入數組中。

在查詢中使用id NOT IN (array)

+0

雖然這種方法可行,但它有點不切實際,因爲它需要兩個不同的查詢,@ Fry_95的答案是更實際的 –

+0

你可能是正確的,但如果你有很多記錄? – Jurgo

+0

您仍然需要將ID存儲在某個地方! –

1

你需要保持一個陣列(例如$arrRecordIds)來跟蹤對前幾頁中顯示的記錄所有的ID。

當你第一頁上:

$arrRecordIds=array(); // Empty array

當你在第二頁上:如果您選擇查詢只需concat- where id NOT IN (implode(',', $arrRecordIds))

這裏$arrNewRecordIds

$arrRecordIds=array_merge($arrRecordIds, $arrNewRecordIds);array_unique($arrRecordIds);

應該在頁面上包含記錄的id。

0

應用系統隨機的概念抽樣

  • 號碼記錄N,決定在n(分頁大小,例如:10,20)要
  • (樣本大小)或需要K = N/N =區間大小
  • 隨機選擇1之間的整數爲k再取每第k個單元

參見:http://www.socialresearchmethods.net/kb/sampprob.php

嘗試使用下面的腳本在showdata.php文件

$per_page = 12; 
$sqlc = "show columns from coupons"; 
$rsdc = mysql_query($sqlc); 
$cols = mysql_num_rows($rsdc); 
$page = $_REQUEST['page']; 
$start = ($page-1)*12; 

$N = 1000; //Total rows in your table (query to get it dynamically) 
$n = $per_page; 
$k = ceil($N/$n); 

$range[] = $page; 

for($i=1;$i<$n;$i++) { 
$range[] = ($page+$k)*$i; 
} 

$sqln = "SELECT * FROM (SELECT @rownum:= @rownum+1 AS rindex, n.* FROM xxx n, (SELECT @rownum := 0) r) AS rows WHERE rindex IN (".implode(',',$range).")"; 
$rsd = mysql_query($sqln); 
+0

我已經使用jquery進行分頁,下面是我如何檢索結果:從index.php代碼:$(「#coupondiv」)。load(「showdata.php?page = 1」,hideLoader);和showdata.php文件:$ per_page = 12; $ sqlc =「顯示優惠券列」; $ rsdc = mysql_query($ sqlc); $ cols = mysql_num_rows($ rsdc); $ page = $ _REQUEST ['page']; $ start =($ page-1)* 12; $ sqln =「select * from xxx where active = 1 order by Rand()limit $ start,12」; $ rsd = mysql_query($ sqln);現在請能有人告訴我如何解決我的問題? –

+0

@GeorgeL。嘗試使用我發佈在您的showdata.php文件中的腳本。我有點擔心查詢性能。 – Suriya

0

的解決方案 - 一個可行的治療。

  1. 做一個選擇隨機搜索所需的所有記錄
  2. 生成隨機如用戶ID。 「史密斯」 .rand(1000,10000)
  3. 形式所有隨機密鑰高達不需要的每
  4. 頁記錄
  5. 插入在含有相應的頁面沒有一個表/字段的字符串的上方。
  6. 重複/循環以上,直到沒有更多的頁面/倫理委員會其餘 - 使用array_splice(STR,從,到) - 然後使用notscreen $ =的print_r($剪接,真),用於串存儲到表 - > randompages:

tb.rec-no | user-id | pageno |字符串(帶有可接受的關鍵字/頁面)

122 | aj7894 | p1 | [0] => 100 [1] => 400 [2] => 056 [3] => 129

123 | aj7894 | p2 | [x] 99 => [x] 240 => [x] 7895 [x] 458 => 320

...達到整個頁面/無記錄/所有頁面 - 不重複數據 - 僅1存儲在隨機研究倫理委員會的關鍵的-column作爲檢索

  • 使用用戶ID &您做生意用WHERE拉出爲該單個用戶&頁

  • 轉換隨機密鑰字符串返回到數組,並使用SELECT WHERE查詢中的數組抽取特定頁面的匹配關鍵記錄以及implode

  • 重新保監會[用戶ID &您做生意]使用$ _GET/POST進行的搜索/觀看時間 - 重新初始化時,新觀點或新的搜索開始

  • 筆記:

    - 更好的使用列表搜索 - 但需要更多的工作,以格式字符串 - 應該給隨機頁面結果原本儲存

    • 與陣列匹配問題是訂單每頁記錄;最低的是第一 - 不是頁面顯示

    • 臨時表沒有好,所以隨機 - 當腳本被拋回給服務器進行第二次和更多的時間,因爲不能被訪問 - 它從內存中由mysql

    • PHP丟失規則 - 沒有脆弱的cookie或java腳本!

    大問題 - 已解決。

    從您的帖子/答案中收到的重新補充幫助。

    快樂的日子!