1

特定のフィールドプロパティを持つテーブル内のすべての行を選択したいと思います。つまり、フィールドは既知の10万個の文字列の1つです。

Rを使用してクエリを送信しています。だから私は次のようなコードを持っています:

my_samp <- sample(unique_ids, replace=T, size=10^6)  
my_conn <- dbConnect(MySQL(),user='me',dbname='my_db')
query <- paste('SELECT blah1, blah2,...,blah900 FROM my_table WHERE      blah1=',paste(my_samp,collapse=' OR ',sep=''),sep='')
res1 <- dbSendQuery(my_conn, query)
my_data <- fetch(res1,n=-1)
dbDisconnect(my_conn)

ただし、Rインタープリターまたはmysqlのいずれかによって文字列が正しく処理されないのではないかと心配しています。また、これは非効率的だと思います。よりクリーンな解決策はありますか?

テーブルが大きすぎるため、dbReadTableを使用してテーブル全体をRに直接読み取ることはできません。

私は、プロセスをフォークすることによってこれを数千回行うことを計画しています-統計的ブートストラップ。

my_sampで文字列が繰り返される場合は、クエリに重複するレコードが必要です。

4

3 に答える 3

1

Blue Magisterの考え方によると、おそらく、これらの「既知の」文字列がすべて格納されたテーブルが必要です。次に、クエリでそのテーブルに参加して、結果を除外できます。

于 2012-08-20T23:08:25.300 に答える
1

データベースに一時テーブルを作成するためのアクセス権がある場合は、すべての文字列をそのテーブルに入力し、行を選択するときにそのテーブルに結合できます。それよりも永続的である場合は、Rの代わりにテーブルを作成し、データベース内の文字列を管理できます。

于 2012-08-20T23:09:54.433 に答える
0

そのための最良の方法は次のとおりです。

  1. A)既知の文字列のリストを作成するサブクエリを作成するか、B)データベースのテーブルに既知の文字列を挿入します
  2. 次に、A)これらのテーブルを使用して新しい結合クエリを作成するか、B)次のようにイミディエートリストで「IN句」を使用します。

    query <- paste('select * from my_table where blah1=',paste(my_samp,collapse=' OR ',paste(' in (str1, str2, str3, str4)',sep=''),sep=''),sep='')
    
于 2012-08-20T23:07:32.800 に答える