0

こんにちは、配列を受け取る関数があり、配列内の各要素に対してランダムな結果 ID を選択するクエリを実行しますが、重複を避けたいのですが、結果の ID が重複しているかどうかを確認してクエリを再度実行するにはどうすればよいですか? ループ内で要素をスキップしていない間ずっと?ここに私の試みがあります(注:$array_resultは7要素です)、各配列要素に対して個別にクエリを実行する必要があるため、個別の選択も機能しません

$queryn = "select taxonomic_units.tsn, hierarchy.hierarchy_string, hierarchy.TSN, taxonomic_units.rank_id from hierarchy left join taxonomic_units on hierarchy.TSN = taxonomic_units.tsn where taxonomic_units.rank_id = 220 and hierarchy.hierarchy_string LIKE '%$array_result[0]%'order by rand() limit 1";
$resultn = $dbn -> Execute($queryn);
$rown=$resultn->FetchRow();
$newspecies = $rown['tsn'];
$result_array[] = $newspecies;

for($i=1; $i<count($array_result);$i++){
   $previous = implode(',', $result_array);
$queryn = "select taxonomic_units.tsn,
                  hierarchy.hierarchy_string,
                  hierarchy.TSN,
                  taxonomic_units.rank_id
           from hierarchy
           left join taxonomic_units
                  on hierarchy.TSN = taxonomic_units.tsn
           where taxonomic_units.rank_id = 220
                  and hierarchy.hierarchy_string LIKE '%$array_result[$i]%'
                  and taxonomic_units.tsn not in ('$previous')
           order by rand()
           limit 1";
$resultn = $dbn -> Execute($queryn);
$rown=$resultn->FetchRow();
$newspecies = $rown['tsn'];
$result_array[] = $newspecies;
}
4

4 に答える 4

0
function getrandomspecies($array_result){

 $dbn = adodbConnect(); //connect to database

 $result_array = array(); //make empty array for result array
  $i=0;

 a: foreach($array_result as $id){ // this loops 7 times
   for($j=0;$j<=$i;$j++)
   {
       if($array_result[$j]==$id)
       {
           goto a; //will go to foreach loop if there is a previous occurence of the element
       }
   }
  //complicated query that basically chooses a random id based on a likeness of a string that has other ids 
  $queryn = "select taxonomic_units.tsn, hierarchy.hierarchy_string, hierarchy.TSN, taxonomic_units.rank_id from hierarchy left join taxonomic_units on hierarchy.TSN = taxonomic_units.tsn where taxonomic_units.rank_id = 220 and hierarchy.hierarchy_string LIKE '%$id%'order by rand() limit 1";

   $resultn = $dbn -> Execute($queryn);

   $rown=$resultn->FetchRow();

   $newspecies = $rown['tsn'];

   $result_array[] = $newspecies; //this is the result array and the one result putting in
 }    

}

于 2013-08-07T04:51:08.077 に答える
0

次のようなことができます。

$previous = implode(',', $result_array);
$queryn = "select taxonomic_units.tsn,
                  hierarchy.hierarchy_string,
                  hierarchy.TSN,
                  taxonomic_units.rank_id
           from hierarchy
           left join taxonomic_units
                  on hierarchy.TSN = taxonomic_units.tsn
           where taxonomic_units.rank_id = 220
                  and hierarchy.hierarchy_string LIKE '%$id%'order
                  and taxonomic_units.tsn not in (".$previous.")
           order by rand()
           limit 1";

既に取得した をand除外した最終結果に注意してください。tsn少し調整する必要があるかもしれませんが ($result_arrayが空かどうかを確認するなど)、それが基本的な考え方です。

于 2013-08-07T04:57:16.117 に答える