1

私はインターウェブ全体を見てきましたが、探している単純な答えを見つけることができません-おそらくそれが存在しないためですが..おそらく検索する正しい用語がわからないためです。

さて、変数を取得しました。実際には、関数に渡す配列内のキーと値のペアです。キーは args[comments_modified] で、値は動的に生成されます - 常にコンマで区切られた数値になります (つまり、1,2,3,4,5)

だから、非常に明確にするために:

         $args[comments_mentioned] == "1,2,3,4"; //could be any amount of number, not just 1,2,3,4,5

次のように、これを「IN」句で使用する変数としてSQLステートメントに渡したいと思います。

         $sr_sql = <<<SQL
         SELECT *
         FROM $wpdb->commentmeta
         WHERE meta_value = %s
         AND comment_ID in ($args[comments_mentioned])
         ORDER BY meta_id DESC
         SQL; 

次に、ワードプレスの準備を使用して準備し、結果を取得します

        $sr_query = $wpdb->prepare( $sr_sql, $args[user_id]) );
        //receive the correct sql statement, and plug 'er in.
        $sr_comment_rows = $wpdb->get_results($sr_query);

foreach ループを実行します。

        foreach ($sr_comment_rows as $sr_comment) {
            $sResults .= 'do something with $sr_comment';
        }

今、私は上記のコードが機能しないことに気付きました - 私はそのようにそこに変数を渡すことはできません. しかし、文字列 (%s) として渡すことはできません。これは、'1,2,3,45' でラップされているため、各数値ではなく文字列全体を検索するためです。コンマがあるため、int (%d) として渡すことはできません...

他の投稿では、一時テーブルまたは変数の作成について言及されていましたが、それが mysql で正しい方法であるかどうか、または参照する方法が正しいかどうかはわかりません。

それで、どうすればいいですか?動作する実際のコードの好み;)

読んで助けてくれてありがとう!

4

2 に答える 2

0

データを正規化できない場合の 1 つのオプションは、文字列をカンマで囲み、次の",1,2,3,4,"ようにすることです。

AND LOCATE( CONCAT(',',comment_ID,',') , ($args[comments_mentioned]) )

例が見つかった場合に一致します。',3,'in ',1,2,3,4,'(例として 3 を使用)

于 2013-04-24T21:34:42.850 に答える
0

これで十分だと思います:

$params = $args[comments_mentioned];
$table = $wpdb->commentmeta;
$sr_sql = "
         SELECT *
         FROM $table
         WHERE meta_value = %s
         AND comment_ID in ($params)
         ORDER BY meta_id DESC
         ";

次のような結果になります。

SELECT *
FROM table_on_variable
WHERE meta_value = %s
         AND comment_ID in (1,2,3,4)
         ORDER BY meta_id DESC

主な問題が in 句に関するものである場合、上記のように二重引用符と単一変数を使用しても問題はありません。

于 2013-04-24T22:16:03.933 に答える