2

複数の条件フィールドを使用して検索システムを作成しようとしています。私の質問は、類似(LIKE)だけでなく、正確な単語で検索するときに、空の基準フィールド(ユーザーによって省略された)をどのように処理するかです。

コード:

$prva = mysql_real_escape_string($_POST["crit1"]);
$druga = mysql_real_escape_string($_POST["crit2"]);
$tretja = mysql_real_escape_string($_POST["crit3"]);
$cetrta = mysql_real_escape_string($_POST["crit4"]);

$query = mysql_query("SELECT pointID FROM bpoint WHERE
(sName LIKE '%$prva%') AND
(sAddr LIKE '%$druga%') AND
(placeID LIKE '%$tretja%') AND
(sPhone = '$cetrta')
"); 

誰かがこれを提案しましたが、私はそれがどのように機能するかを正確に理解していません:

WHERE
(col1=@col1 or @col1 is null) and
(col2=@col2 or @col2 is null) and
(col3=@col3 or @col3 is null) and
.
.

ありがとう :)

4

3 に答える 3

2
$query="SELECT pointID FROM bpoint WHERE ";

if(isset($_POST['condition1']))
$condition[]="name='somename'";


if(isset($_POST['condition2']))
$condition[]="address='someaddress'";

//More condition here

if(!empty($condition))
$query .= implode(' AND ',$condition);

mysql_query($query)
于 2012-07-22T15:02:40.853 に答える
1

提案は、次のクエリを記述することと同じです。

SELECT
    pointID 
FROM 
    bpoint 
WHERE
    (sName = '$prva' or sName is null)
    AND (sAddr = '$druga' or aAdds is null)
    AND (placeID = '$tretja' or placeID is null)
    AND (sPhone = '$cetrta' or sPhone is null)

検索している列がnullでない限り、これは基本的に返されたデータの完全一致を照会しています。検索されたすべてのフィールドが null であるレコードがない限り、これは非常にうまく機能します。その場合、すべてのフィールドが返されます。

于 2012-07-22T14:27:54.957 に答える
1
col1=@col1 or @col1 is null
     ^^^              ^^^^^
here it will check     here here check that col1 is null
that col1 is equal
to col1  

> 条件があるのでOR、col が null (または指定されたもの) か何かであるという 2 つの条件のみが存在し、何かが存在する場合はフェッチし、そうでなければここで null を返し、それらのすべてをチェックします (すべてが返されます)

于 2012-07-22T14:30:44.870 に答える