2011-12-12 61 views
0

我有兩個表從限制日期的兩個mysql表中選擇一條隨機記錄?

CREATE TABLE `shares` (
    `id` int(11) NOT NULL auto_increment, 
    `entry_id` int(11) default NULL, 
    `service` int(11) default NULL, 
    `created_date` datetime default NULL, 
    `ip` varchar(45) default NULL, 
    PRIMARY KEY (`id`), 
    KEY `entry_id` (`entry_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2570 DEFAULT CHARSET=latin1; 

CREATE TABLE `entries` (
    `id` int(11) NOT NULL auto_increment, 
    `first_name` varchar(255) default NULL, 
    `last_name` varchar(255) default NULL, 
    `street_address` varchar(255) default NULL, 
    `city` varchar(255) default NULL, 
    `postal_code` varchar(255) default NULL, 
    `province` varchar(255) default NULL, 
    `daytime_phone` varchar(255) default NULL, 
    `email_address` varchar(255) default NULL, 
    `tos` int(11) default NULL, 
    `subscribe` int(11) default NULL, 
    `ip` varchar(45) default NULL, 
    `created_date` datetime default NULL, 
    `pin` varchar(255) default NULL, 
    `return` int(11) default NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id_UNIQUE` (`id`), 
    KEY `email_address` (`email_address`) 
) ENGINE=InnoDB AUTO_INCREMENT=36503 DEFAULT CHARSET=latin1; 

,我需要生成兩個表中的10個隨機記錄。

信息:每個共享是一個額外的選票,但人們可以共享使用多種服務(每個服務仍然是一個額外的投票)和共享多次(這仍然是一個額外的選票)。

所以我需要從項隨機10條,考慮到如果一個條目的ID存在,那麼自謂也選擇。

例,

User 1 
User 2 
User 3 
User 4 1 Share 
User 5 
User 6 1 Share 
User 7 2 Shares 
User 8 
User 9 
User 10 3 Shares 

它將採取和隨機生成一個記錄,其中

User 1 (1 chance) 
User 2 (1 chance) 
User 3 (1 chance) 
User 4 1 Share (2 chances) 
User 5 (1 chance) 
User 6 1 Share (2 chance) 
User 7 2 Shares (2 chance) 
User 8 (1 chance) 
User 9 (1 chance) 
User 10 3 Shares (2 chance) 

我不知道我該怎麼辦呢?任何幫助

+0

相關:http://stackoverflow.com/questions/211329/quick-selection-of-a-random-row-from-a-large-table-in-mysql –

回答

0

我的方法是從「入口」創建的10個隨機ID的數組,然後看看在「股」存在這些ID。如果他們這樣做,將該ID再次放入陣列中,給他們第二次機會。然後它是從該結束數組中隨機選擇的。要做到這一點

的一種方法是這樣的:

$entryIdArray = array(); 
$query = mysql_query(SELECT * FROM entries ORDER BY RAND LIMIT 10); 
while($row = mysql_fetch_array($query)){ 
    $entryIdArray[] = $row['id']; 
} 


foreach($entryIdArray as $thisEntrant){ 
    $query = mysql_query(SELECT * FROM shares WHERE entry_id = $thisEntrant); 
    if(mysql_num_rows($query) > 0){ 
     $entryIdArray[] = $thisEntrant; 
    } 
} 

$winningEntrantId = $entryIdArray[rand(0, sizeof($entryIdArray)-1)]; 

我從來沒有嘗試加入到一個數組,而通過同一陣列循環,所以你可能不得不做出一個單獨的數組添加所有的代替那個,但是這顯示了基本的想法。

相關問題