2013-11-28 68 views
0

這裏是我的問題,我有2個表這裏涉及到:TINVOICES和TJOBS動態搜索選項2個表

TINVOICES - Job_no 
TINVOICES - Year 
TJOBS - Staff 
TINVOICES - Month 
TJOBS - Country 
TINVOICES - Paid 
TJOBS - Client_no 
TINVOICES - 30 Days 

我想要的搜索選項是動態的,像它應該接受搜索工作,今年,獨自一人。或者僅支付或僅僅一個月...等等。我有兩張桌子。 你能幫我解決一下我的方法嗎?

查看我的代碼如下。

太謝謝你了!

這裏是我的搜索選項:

Search Options


if (isset($_POST['job_no'])) { 
     $job_no = $_POST['job_no']; 
     if ($_POST['job_no'] != "") { $job_no = " job_no=".$job_no." AND"; $search += 1;} 
    } 
    ..other ifs 

if ($search != 0) { 
    if (isset($_POST['country'])) { 
     if ($_POST['country'] == "") { 
      $query = "WHERE $job_no$month$id$year$staff_no$paid"; 
     } 
     else { 
      $query = "AND $job_no$month$id$year$staff_no$paid"; 
     } 
    } 
    else{ 
     $query = "WHERE $job_no$month$id$year$staff_no$paid"; 
    } 
}          

//Remove string AND on the end of a query if found 
if (substr($query, -3) == "AND") { $query = substr($query, 0, -3); } 

if (isset($_POST['country']) && $_POST['country'] != "") {  
    $country = $_POST['country']; 
    if ($country == "All") { 
     $sql = "SELECT p . * FROM tinvoices $query AS p "; 
    } 
    else if ($country == "Middle East") { 
     $sql = " 
     SELECT p . * 
     FROM tinvoices AS p 
     LEFT JOIN tjobs AS j 
     ON p.job_no = j.job_no 
     WHERE j.location = 'Qatar' OR j.location = 'UAE' $query "; 
    } 
    else { 
     $sql = " 
     SELECT p . * 
     FROM tinvoices AS p 
     LEFT JOIN tjobs AS j 
     ON p.job_no = j.job_no 
     WHERE j.location = '$country' $query "; 
    } 
    $result = mysqli_query($con,$sql) or die("MySQL Error: ".mysql_error()); 
} 
elseif (isset($_POST['client_no']) && $_POST['client_no'] != "") {  
    $client_no = $_POST['client_no']; 
    $sql = " 
     SELECT p . * 
     FROM tinvoices AS p 
     LEFT JOIN tjobs AS j 
     ON p.job_no = j.job_no 
     WHERE j.location = '$country' $query "; 
    echo $sql; 
} 
else { 
    $sql = "SELECT p . * FROM tinvoices AS p $query"; 
    //echo $sql; 
    $result = mysqli_query($con,$sql) or die("MySQL Error: ".mysql_error()); 
} 
+0

動態以什麼方式?如果你用一種我們能夠理解你想要做什麼,你試圖做什麼,什麼不起作用的方式來制定你的問題,那將是非常好的 – nrathaus

+0

嗨,感謝您的評論。我希望搜索選項是動態的,就像它應該接受搜索工作和年份一樣。或者僅支付或僅僅一個月...等等。我有兩張桌子。 – EatCodePlaySleep

+0

你已經在正確的軌道上,只是分割「WHERE」部分,並保持查詢的第一部分爲一個,這樣$ sql =「select ..」,然後添加$ sql。=「其中.. 「 – nrathaus

回答

3

使搜索動態,首先確保表單元素名稱是完全一樣的數據庫表字段。對於兩個表格,您可以在表格名稱前加上表格元素名稱,然後在字段中加前綴。例如

如果你的數據庫字段名稱是tinvoices表位置,然後你的位置元素的名稱應該是tinvoices_location

所以,當提交表單時可以遍歷這樣 發佈的數據假設你有兩條表Table 1和Table

$sql = "SELECT table1.*, table2.* FROM table1 INNER JOIN table2 ON table2.id = table1.table2_column WHERE "; 

$conditions = array(); 
    foreach($_POST as $key => $value){ 
    $tableFields = explode('_', $key); 
    $conditions[] = $tableFields[0].'.'.$tableFields[1].' = "'.$value.'"'; // will produce table1.location = "Qatar" 
    } 
$sql .= implode(' AND ', $conditions); // will produce condtion1 AND condition2 and so on 

$sql .= ' ORDER BY table1.column'; 

在循環中,您還可以使用針對specifi元素

if(preg_match('/table1_/', $key)){ 
//populate conditions array 
} 

接下來,您可以根據需要修改它。

+0

不錯!我不知道。我現在試試這個,我會盡快回復你。是的,我有相同的表單名稱和數據庫字段名稱謝謝。 – EatCodePlaySleep

+0

得到它的工作!只是調整一些小東西。多謝兄弟! – EatCodePlaySleep