MySQL查询中的逗号

Posted

技术标签:

【中文标题】MySQL查询中的逗号【英文标题】:Comma inside MySQL query 【发布时间】:2013-06-09 09:53:23 【问题描述】:
$sql_query_posts = "SELECT * FROM `posts`";

$sql_form_permission = mysql_query("SELECT * FROM `integrations` WHERE `rank_id`='$user_level' AND `mode`='form_per'");
    if ( mysql_num_rows($sql_form_permissions) > 0 ) 

现在我正在努力解决的部分:

   $sql_query_posts .= " IN (";
    while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )  
    $sql_query_posts .= $row_form_permissions['form_id'] . ",";
    
    $sql_query_posts .= ")";
    

我希望输出类似于:

SELECT * FROM `posts` IN (4, 3, 2)

但上面的代码给出的输出如下:

SELECT * FROM `posts` IN (4, 3, 2,)

所以我必须去掉最后的逗号。如何确保脚本在最后一行禁用逗号。

【问题讨论】:

【参考方案1】:

我会为此使用implode

$post_ids = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )  
    $post_ids[] = $row_form_permissions['form_id'];


$sql_query_posts .= " IN (" . implode(",", $post_ids) . ")";

【讨论】:

我刚刚看到你在 MaX 之前发布了你的答案,所以我也会对此发表评论。我同意应该使用 implode() 而不是 substring(),但这个问题的提出方式似乎是 substring() 是所要求的。我赞成您的回答,以反映使用 implode() 而不是 substr() 或 trim() 的重要性。【参考方案2】:

像这样使用$sql_query_posts = substr($sql_query_posts, 0, -1);

$sql_query_posts .= " IN (";
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )  
    $sql_query_posts .= $row_form_permissions['form_id'] . ",";

$sql_query_posts = substr($sql_query_posts, 0, -1);
$sql_query_posts .= ")";

只是为了解决您最终可能无法获取任何记录(一个空数组)的情况,使用 implode() 可能会更明智,就像这样(我总是这样使用它):

$ins = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) ) 
    $ins[] = $row_form_permissions['form_id'];

$sql_query_posts .= sprintf(' IN (%s)', implode(',', $ins));

【讨论】:

如果没有获取记录怎么办? 我同意至少应该检查空结果集,并使用 implode() 相应地更新了答案。【参考方案3】:

在我看来,比建议更漂亮的方式是:

$forms = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )
  $forms[] = $row_form_permissions['form_id'];

$sql_query_posts .= " IN (".implode(",",$forms).")";

【讨论】:

我同意应该使用 implode() 而不是 substring(),但是这个问题的提出方式似乎是 substring() 是我们所要求的。我赞成您的回答,以反映使用 implode() 而不是 substr() 或 trim() 的重要性。【参考方案4】:

您可以使用substr 去掉逗号。像这样:

$sql_query_posts .= " IN (";
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )  
$sql_query_posts .= $row_form_permissions['form_id'] . ",";

$sql_query_posts = substr($sql_query_posts, 0, -1); // <- this is the new line
$sql_query_posts .= ")";

【讨论】:

【参考方案5】:

作为substr 的替代品,您还可以使用trim 去掉逗号。

$sql_query_posts = trim($sql_query_posts, ',') . ')';

Trim 比 substr 稍微安全一些,因为您可以将其限制为精确的字符或字符集。

【讨论】:

【参考方案6】:

在这种情况下我会使用修剪或(rtrim)函数(http://php.net/manual/en/function.trim.php) 你给它一个字符串,并使用它的第二个参数指定额外的字符,它会为你清理它。

【讨论】:

以上是关于MySQL查询中的逗号的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询:连接表并将记录显示为单行中的逗号分隔字符串

MYSQL列中的数据以逗号隔开,如何查询?

mysql 字段内容是用逗号分隔的。怎么按序列查询内容

mysql查询中带逗号,查询结果的问题。

解决mysql查询,in条件参数为带逗号的字符串,查询结果错误

mysql 查询问题。我想查询出包含一个逗号的记录。 你好,今天 你好,今天,风云