2012-11-06 74 views
0

我的查詢語句沒有成功,我認爲它與我執行它的方式有關。MySQL Select AND OR

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or phone = '".$phone."'"; 

基本上,我想從customer_det中選擇所有名字,當姓和名匹配發布的姓和名時。如果沒有公佈姓和名,那麼我希望它選擇所有發佈的電話號碼匹配的地方。我的三個變量$ fname,$ lname和$ phone都設置爲從前面的形式$ _POST ['fname']; etc ...

這是正確的邏輯使用?

回答

1

正確的邏輯沒有被使用,因爲它被合併爲1個查詢。如果只使用1個查詢,它將搜索$fname=''$lname='',這兩個查詢都不會與$ phone部分一起發佈。

嘗試:

if(!empty($fname) && !empty($lname)) 
    $query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."')"; 
else 
    $query5 = "select * from ".$db_prefix."customer_det where phone = '".$phone."'"; 
0

你的查詢正在進行現在將返回在名稱匹配,並且所有行的電話號碼匹配的所有行。如果你想只返回其中的電話號碼一致,但只有當提交的姓和名是空白行,你需要將它添加到where子句,像這樣:

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or ('".$fname."' = '' and '".$lname."' = '' and phone = '".$phone."'"); 

這保證了手機只有當提交的姓名和姓氏都爲空時,數字纔會用於匹配行,並且不需要編寫兩個單獨的查詢。