簡體   English   中英

PHP mysql選擇concat

[英]PHP mysql select 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, 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語句中有語法錯誤。 您使用單引號將字符串轉義,但是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);

如果我對db_query是正確的並且您正在使用Drupal,請嘗試以下方法(對於Drupal 7):

$sql = <<<SQL
    SELECT
      DISTINCT nIdentidad,
      CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
    FROM tarjeta_indent
    WHERE nIdentidad LIKE :input
    ORDER BY nIdentidaa
    LIMIT :limit
SQL;
$resp = db_query($sql, array(':input' => $input, ':limit' => $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);

CONCAT將適用於字符串/ varchar,但不適用於數字。 因此,如果primaryNombre和segundNombre是INT數據類型,則CONCAT將失敗。 嘗試使用CONVERT函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM