Php 从两个日期有限的mysql表中随机选择一条记录?

Php 从两个日期有限的mysql表中随机选择一条记录?,php,mysql,Php,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_i

我有两张桌子

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添加到该数组中,但这显示了基本思想。

相关: