これに対する答えがまだないことに驚いています...それは私が根本的に間違ったことをしていることを私に示唆しています。または他のみんながそうです。
クライアント側で並べ替えられた可能性のある繰り返し値の配列がPOSTリクエストとして受信され、それらの値によってインデックス付けされ、それらの値と同じ順序で冗長性を維持するMySQLから結果セットを返すことが目標であるとします。 !!!
したがって、値が次の場合:1,2,3,2,3,4,5,5,5
望ましい結果は次のとおりです。
+----+-------+
| id | value |
+----+-------+
| 1 | one |
| 2 | two |
| 3 | three |
| 2 | two |
| 3 | three |
| 4 | four |
| 5 | five |
| 5 | five |
| 5 | five |
+----+-------+
以下のコードは機能しているようですが、キリスト、真剣に?array_intersect()
単純な結果セットを入力配列と同じパターンで順序付けて繰り返すために、悪用して2つの異なるループを作成する必要があります。そのうちの1つはネストされていますか?これは、それが実際に行われることになっている方法ではありえません。
function repQuery($inids,$incol,$querystring,$emptyval = "NULL"){
# incol is the name of a column in the query
# inids is an array within which the value of incol must be found
# querystring is a query of the form...
# "select FOO from BAR where %s in (%s) BLAH BLAH BLAH"
# The first %s will be replaced by $incol and the second by $inids
$qq = mysql_query(sprintf($querystring,$incol,implode(",",$inids))) or die(mysql_error());
$nf = mysql_num_fields($qq); $dummyrow = array();
for($ii = 0; $ii < $nf; $ii+= 1){
$dummyrow[mysql_field_name($qq,$ii)] = $emptyval;
};
$out = array_fill(0,count($inids),$dummyrow);
while($rr = mysql_fetch_assoc($qq)){
foreach(array_keys(array_intersect($inids,array($rr[$incol]))) as $ii) {
$out[(int)$ii] = $rr;
}
}
return $out;
}
私の質問は次のとおりです。受け入れられているパターンやPHP配列コマンド、または私が見落としている他の何かがありますか?上記ではR
ワンライナーになります。