1

我正在运行在Coldfusion8/MySQL 5.0.88数据库上运行的应用程序。

该应用程序有一个搜索表单,用户可以使用它来搜索产品 ID。

现在我的 SQL 语句如下所示:

  ...
  AND a.product_id LIKE <cfqueryparam value="%#form.s_product_id#%" cfsqltype="cf_sql_varchar">

用户通常会传入 a single id or partial id,所以我需要这对两者都有效:

   123456 (full id)
   123 (partial id)

但是,我还想让用户搜索多个 ID。所以用户可能会输入:

   12345,233345,78876

问题
我可以在提交表单之前清除空格,但我如何才能使我的 MySQL 搜索处理程序正确地将其识别为列表。如果我只是使用IN而不是LIKE我会丢失 partial_ID,不是吗?

4

3 回答 3

1

我不喜欢冷融合,但您需要用逗号分割 ID 列表并构建如下查询:

... AND (a.product_id LIKE '%12345%' OR a.product_id LIKE '%123%' OR a.product_id LIKE '%78876%') ...
于 2012-08-22T08:36:32.337 回答
1

因此,一个有效的 ColdFusion 解决方案可能是:

    <cfquery name="your_query_name" datasource="your_datasource">
    SELECT column1, column2
    FROM a
    WHERE condition=whatever
    <cfif listlen(form.s_product_id)>
       AND (1=0 /* always false; for SQL syntax only */
       <cfloop list="#form.s_product_id#" index="variables.s_product_id_ii">
         OR a.product_id LIKE <cfqueryparam value="%#variables.s_product_id_ii#%" cfsqltype="cf_sql_varchar" />
       </cfloop>)
    </cfif>
    </cfquery>

如果 'a.product_id' 是一个整数字段,请考虑将其转换为 VARCHAR

    CAST(a.product_id AS VARCHAR(50)) LIKE <cfqueryparam...

所以这个查询不会在不同的、更严格的数据库上中断。或者,由于您将 form.s_product_id 列表拆分为其组件整数,您可以将 cfqueryparam cfsqltype 更改为“cf_sql_integer”。

于 2012-08-22T17:38:44.663 回答
1
<?php
include('config.php');
if (!empty($_REQUEST['term'])) {

$term = mysql_real_escape_string($_REQUEST['term']);     

$sql ="Select product.id,costomer.name,costomer.mobile,product.cid,product.pname,product.model,product.date,product.harddisk,product.ram,product.damage,product.driver,product.status from product INNER JOIN costomer
ON costomer.cid=product.cid WHERE id LIKE '%".$term."%'
OR name LIKE '%".$term."%',
OR pname LIKE '%".$term."%',
OR model LIKE '%".$term."%',
OR statusLIKE '%".$term."%',";

$r_query = mysql_query($sql); 
?>

<?php
while ($row = mysql_fetch_array($r_query)){  


echo '<tr><td>' .$row['id'].'</td>';  
echo '<td>'.$row['name'].'</td>';
echo '<td>' .$row['pname'].'-'.$row['model'].'</td>';  
echo '<td>'.$row['mobile'].'</td>';
echo '<td>'.$row['status'].'</td>';


}  
echo '</tr>';
}

?>
于 2014-01-14T12:50:11.830 回答