您好我正在从数据库基础用户ID查询竞赛,但是我想避免在我的results_array中选择重复项,此函数getrandomspecies接收到array_result,此数组结果迭代7次。如何测试我没有在results_array中放置重复项?我有几个副本。
function getrandomspecies($array_result){
//database connection
$dbn = adodbConnect();
foreach($array_result as $possible){
//query the results
$querys= "select * from taxonomic_units where tsn = $possible";
$resultss = $dbn -> Execute($querys);
while($rowss=$resultss->FetchRow()){
$id = $rowss['tsn']; //there ID
$ranksss = $rowss['rank_id']; //ranking id, I choose 220 and 230
if($ranksss == 220 || $ranksss == 230){
$prelimary_array[] = $id;
}
}
//grab random index
$index = array_rand($prelimary_array,1);
//put result id into a variable
$newspecies = $prelimary_array[$index];
//put that variable in an array
$results_array[] = $newspecies; //there is 7 newspecies/winners at the end, I dont want duplicates
}
return $results_array;
}
答案 0 :(得分:0)
MySQL应该如下:
select distinct tsn, rank_id from taxonomic_units where tsn = $possible
但理想情况下,你应该使用准备好的陈述。
答案 1 :(得分:0)
$querys= "select DISTINCT tsn from taxonomic_units where tsn IN (".implode(",",$array_result).") AND rank_id IN (220,230) ORDER BY RAND() LIMIT 7 ";
答案 2 :(得分:0)
循环结果数组,如果它不存在则添加它。如果你的结果少于7,那就再做一次你的大循环。
替换此行:
$results_array[] = $newspecies;
by:
$loop_1_more_time=0;
if (isset($results_array)){
foreach($results_array as $result){
if ($result == $new_specie){
$loop_1_more_time=1;
}
}
}
if ($loop_1_more_time == 0){
$results_array[] = $newspecies;
}
//如果$ loop_1_more_time等于1,则重新开始。要重新开始并确保你有七个而不是6个或更少,你可以用一个取决于$ array_result的count()的“for”循环替换你的第一个“foreach”循环,$ array_result将是array_result [$ i]而不是$。 $ i将从0开始并在循环的每一端递增。如果$ loop_1_more_time == 1;它将不会递增。 示例:
for ($i = 0; $i < count($array_result); $i++) {
//stuff
//if ($loop_1_more_time=1;) { $i--; }
}
答案 3 :(得分:-1)
为什么不尝试改组阵列,然后选择前X个数字?
这样,它不会检查结果数组中的重复项,而是永远不会出现在第一位