2015-11-04 30 views
0

我对数据库运行查询,并且必须检查多个条件为true。我所提供的代码提取了我想要的数据,但是如果我必须检查更多的列,它可能会很快失控。我不想要一个查询,在那里我必须写出十几个“AND”条件。我正在学习一些MySQL,希望得到任何帮助。寻找一个更清洁的方式来运行查询,必须检查多个“AND”条件

<?php 
$servername = "localhost"; 
$username = "xxxx"; 
$password = "xxxx"; 
$dbname = "oldga740_SeniorProject"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 

//Set up and run my Query 

$sql = "SELECT Project, Client, DateReceived, LastName, FinalReviewDate FROM Projects 
      WHERE FinalReviewDate IS NOT NULL 
      AND DateDelivered IS NULL 
      AND DateAccepted IS NULL 
      ORDER BY DateAccepted DESC"; 
$result = $conn->query($sql); 

//Display results 

if ($result->num_rows > 0) { 
echo "<table><tr><th>Client</th><th>Project</th><th>Point of  Contact</th><th>Date Project Received</th><th>Final Review Date</th></tr>"; 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "<tr><td>" . $row["Client"]. "</td><td>" . $row ["Project"]. "</td><td> " . $row["LastName"]. "</td><td> " . $row ["DateReceived"]. "</td><td> " . $row["FinalReviewDate"]. "</td></tr>"; 
} 
echo "</table>"; 
} else { 
echo "0 results"; 
} 

$conn->close(); 
?> 

回答

1

您可以为您和条件使用数组。但是一般来说,如果你准备好陈述和绑定价值,你必须小心。此外,您还可以在类似下面的类似的方式动态地创建WHERE条款:

编辑:

$where = array(
    array(
     'column'=>'FinalReviewDate', 
     'operator'=>'AND', 
     'condition'=>'IS NOT NULL', 
     'value'=>'', 
    ), 
    array(
     'column'=>'DateDelivered', 
     'operator'=>'AND', 
     'condition'=>'IS NULL', 
     'value'=>'', 
    ), 
    array(
     'column'=>'DateAccepted', 
     'operator'=>'AND', 
     'condition'=>'IS NULL', 
     'value'=>'', 
    ), 
    array(
     'column'=>'other_column', 
     'operator'=>'OR', 
     'condition'=>'>=', 
     'value'=>5, 
    ), 
); 

$temp = array(); 

foreach($where as $key => $value) { 
if ($value['value'] == '') { 
     $temp[] = $value['operator'].' '.$value['column'].' '.$value['condition']; 
    } else { 
     $temp[] = $value['operator'].' '.$value['column'].' '.$value['condition'].' '.$value['value']; 
    } 
} 

$where_sql = '1 = 1 '.implode(' ', $temp); 

echo $where_sql; 

结果:

1 = 1 AND FinalReviewDate IS NOT NULL AND DateDelivered IS NULL AND DateAccepted IS NULL OR other_column >= 5 

OLD ANSWER

$ands = array(
    array(
     'column'=>'FinalReviewDate', 
     'condition'=>'IS NOT NULL' 
    ), 
    array(
     'column'=>'DateDelivered', 
     'condition'=>'IS NULL' 
    ), 
    array(
     'column'=>'DateAccepted', 
     'condition'=>'IS NULL' 
    ), 
); 

$temp = array(); 

foreach($ands as $key => $value) { 
    $temp[] = $value['column'].' '.$value['condition']; 
} 

$and_sql = implode(' AND ', $temp); 

echo $and_sql; 

结果:

FinalReviewDate IS NOT NULL AND DateDelivered IS NULL AND DateAccepted IS NULL 
+0

在代码中我会放置数组?我假设它会替换WHERE和两个AND语句... – Tony

+0

您可以将数组放在$ sql变量上方。它取代了以下内容:FinalReviewDate IS NOT NULL AND DateDelivered IS NULL AND DateAccepted IS NULL –

+0

我编辑了答案,查看最终代码。 –

相关问题