您可以使用Order by Rand()函數從數據庫中獲取隨機記錄。
SELECT * FROM tbl_name ORDER BY RAND();
您還可以限制這兩行很輕鬆地爲這樣的:
SELECT * FROM tbl_name ORDER BY RAND() limit 2;
然而這會從DB兩個隨機行,不連續的兩行。
如果你想得到兩個隨機的連續行,你可以運行一個查詢來獲取ID和一個子查詢來獲得它後面的下一個ID。
至於保留一個/兩個表中的數據,一定要保存在兩個表中。將您保存投票的第二張表格鏈接到圖片的ID。顯然根據需要在鏈接(和其他字段)上添加索引。
編輯:下面是代碼,讓你的數據的兩個後續行中的一行,則:
select
a.id,
(
select
min(c.id)
from
table1 c
where
c.id>a.id
limit 1
) as id2
from
table1 a
order by
rand()
limit 1;
編輯2:如果你希望他們爲不同的行中的各種其他位的拉動,我提供了下面的查詢。我用了一個額外的子查詢,就好像初始查詢發生的使用順序時蘭特(拉出最大值(可能的),那麼它解決了只返回一行數據的問題。
select
b.id
from
table1 b,
(
select
a.id as id
from
table1 a
where
a.id<(select max(id) from table1 limit 1)
order by
rand()
limit 1
) a
where
b.id>=a.id
order by
b.id
limit 2
;
是的,看起來子查詢將是不幸的唯一選擇。 – 2012-07-22 13:54:26
@GThompson好吧,我現在添加了查詢來爲您返回兩個連續的記錄。 – Fluffeh 2012-07-22 14:02:51
@GThompson我還添加了一個查詢來將兩個連續的記錄拖到不同的行中,並且包含一個子查詢,以確保在獲取隨機行時獲取兩行數據。 – Fluffeh 2012-07-22 14:25:17