簡體   English   中英

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

[英]Select a random record from two mysql tables with limited date?

我有兩張桌子

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)

我不知道該怎么做? 任何幫助

我的方法是根據“條目”創建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)];

在循環遍歷同一數組時,我從未嘗試添加到數組,因此您可能不得不制作一個單獨的數組以將所有id添加到該數組,但這顯示了基本思想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM