$ dbn = adodbConnect();
foreach($ array_result as $ possible){
//查询结果 $ querys =“select * from taxonomic_units where TSN </跨度> = $可能“; $ resultss = $ dbn - &gt;执行($ querys );
而($ rowss = $ resultss-&GT; FetchRow()){
$ id = $ rowss [’ TSN </跨度> “]; //有ID $ ranksss = $ rowss [‘rank_id’]; //排名id,我选择220和230
if($ ranksss == 220
那这个呢?您可以使用一个查询执行此操作:
$querys= "select DISTINCT tsn from taxonomic_units where tsn IN (".implode(",",$array_result).") AND rank_id IN (220,230) ORDER BY RAND() LIMIT 7 ";
MySQL应该如下:
select distinct tsn, rank_id from taxonomic_units where tsn = $possible
但理想情况下,您应该使用预准备语句。
循环结果数组,如果它不存在则添加它。如果你的结果少于7,那就再做一次你的大循环。
替换这一行:
$results_array[] = $newspecies;
通过:
$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--; } }
为什么不尝试改组阵列,然后选择前X个数字呢?
这样,它不会检查结果数组中的重复项,而是永远不会出现在第一位