PHP mysql选择concat

PHP mysql选择concat,php,mysql,concat,Php,Mysql,Concat,我有一个函数,它以以下形式显示自动建议: function searchbyId($params) { $input = strtolower($params['input']); $len = strlen($input); $limit = isset($params['limit']) ? (int) $params['limit']:25; $items=array(); $sql='SELECT DISTINCT nIdentidad, CON

我有一个函数,它以以下形式显示自动建议:

function searchbyId($params) {

    $input = strtolower($params['input']);
    $len = strlen($input);
    $limit = isset($params['limit']) ? (int) $params['limit']:25;
    $items=array();
    $sql='SELECT DISTINCT nIdentidad, CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit;
    $resp=db_query($sql);
    if($resp && db_num_rows($resp)){
        while(list($nIdentidad)=db_fetch_row($resp)) {
            //$name=(strpos($name,'@')===false)?$name:'';
            $items[] ='{"id": "'.$nIdentidad.'", "value": "'.$nIdentidad.'"}';

        }
    }
    $result= '{"results": ['.implode(", ", $items).']}';
    return $result;
}
但仅当我将查询更改为以下内容时才有效:

$sql='SELECT DISTINCT nIdentidad FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit;
我怎么做concat部分


谢谢。

CONCAT可以处理字符串/varchar,但不能处理数字。因此,如果primerNombre和segundNombre是INT数据类型,CONCAT将失败。尝试使用CONVERT函数:

SELECT DISTINCT nIdentidad, 
       CONCAT( CONVERT(primerNombre, char(8)), ' ', 
               CONVERT(segundoNombre, char(8))  ) as nombre

我觉得这非常简单,但是您的concat语句中有一个语法错误;您使用单引号来转义字符串,但PHP字符串是用单引号定义的:

$sql='SELECT DISTINCT nIdentidad, CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit;
这个怎么样

$sql = sprintf(<<<SQL
    SELECT
      DISTINCT nIdentidad,
      CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
    FROM tarjeta_indent
    WHERE nIdentidad LIKE '%s'
    ORDER BY nIdentidaa
    LIMIT %d
SQL
  , mysql_real_escape_string($input), $limit);
这将是Drupal 6版本:

$sql = <<<SQL
    SELECT
      DISTINCT nIdentidad,
      CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
    FROM tarjeta_indent
    WHERE nIdentidad LIKE %s
    ORDER BY nIdentidaa
    LIMIT %d
SQL;
$resp = db_query($sql, $input, $limit);

$sql=这不起作用。。。怎样?请记住,
select distinct
适用于整行。它不是“distinct nIdentidad value”。请尝试按nIdentidad进行
分组
查询,而不是
distinct
。primerNombre和segundNombre是文本。当我在mysql中运行查询时效果很好。请尝试
select concat('whatever',1,'voodoo')
->无需转换。
$sql = <<<SQL
    SELECT
      DISTINCT nIdentidad,
      CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
    FROM tarjeta_indent
    WHERE nIdentidad LIKE %s
    ORDER BY nIdentidaa
    LIMIT %d
SQL;
$resp = db_query($sql, $input, $limit);