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);