1

我已经查看了整个互联网,但找不到我正在寻找的简单答案 - 可能是因为它不存在,但是.. 可能是因为我不知道要搜索的正确术语。

好的,所以,我有一个变量 - 它实际上是我传递给我的函数的数组中的一个键值对。关键是 args[comments_提到] 并且值是为我动态生成的 - 它总是数字,用逗号分隔(即 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

我想将它作为变量传递到 sql 语句中,以在“IN”子句中使用,如下所示:

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

然后,使用 wordpress 准备它并获得结果

        $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

我相信这应该足够了:

$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 回答
0

如果您无法规范化数据,一种选择是将字符串用逗号括起来",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 回答