0

私はPHPで次のコードを持っています:

$IDs = implode(",", array_keys($result["matches"]));
$sql = "SELECT * FROM table WHERE id IN ($IDs)";

私はそれをNode.jsに「変換」しており、implodeがarray.joinになると思うので、これを試しました。

var ids = Object.keys(answer['matches']).join(",");
var sql = "SELECT * FROM xml_it WHERE id IN (" + ids + ")";

ここで、PHP $ sql変数をエコーすると、期待どおりの結果が得られます。

SELECT * FROM table WHERE id IN (3187,3220,3233,3245,3246,3251,3253,3256, ...

しかし、node.jsを使用すると、次のようになります。

SELECT * FROM xml_it WHERE id_xml IN ([0,1,2,3,4, ...

答え['matches']は明らかに同じ結果です(基本的にはSphinxの検索結果です)

文字列ではなくキーとして取得する理由はありますか?

$resultとvaranswerのデータは次のようになります。

[{"doc":3187,"weight":1,"attrs":{}},{"doc":3220,"weight":1,"attrs":{}},{"doc":3233,"weight":1,"attrs":{}},
4

1 に答える 1

0

これは機能するはずです:

var matches = answer['matches'].map( function( o ) {
  return o.doc;
});
var ids = matches.join(",");
var sql = "SELECT * FROM xml_it WHERE id IN (" + ids + ")";

構造が異なるため、docフィールドをマップする必要があります

于 2012-09-12T16:12:52.400 に答える