1

データベースで実行されているアプリを実行していColdfusion8/MySQL 5.0.88ます。

アプリには、ユーザーが製品 ID を検索するために使用できる検索フォームがあります。

現在、私の SQL ステートメントは次のようになっています。

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

ユーザーは通常、single id またはを渡してpartial idいるため、両方で機能するにはこれが必要です。

   123456 (full id)
   123 (partial id)

ただし、ユーザーが複数の ID を検索できるようにしたいと考えています。したがって、ユーザーは次のように入力できます。

   12345,233345,78876

質問:
フォームを送信する前にスペースをクリアすることはできますが、MySQL 検索ハンドラがこれをリストとして正しく識別するようにするにはどうすればよいですか。IN代わりに使用するLIKEと、partial_ID が失われますね。

4

3 に答える 3

1

私は coldfusion には興味がありませんが、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 に答える