我有一个html表,可以加载mySQL数据库表中的所有内容。我有与mySQL表的列相关的下拉列表 - 当用户选择其中一个下拉列表时,它使用AJAX来查询数据库。
我需要弄清楚如何动态构建查询,因为有时下拉列表将为空(即他们不想按该列过滤)。
这样做的最佳方式是什么?
目前我有这样的事情:
$stationFilter = $_GET['station'];
$verticalFilter = $_GET['vertical'];
$creativeFilter = $_GET['creative'];
$weekFilter = $_GET['week'];
$result = mysql_query("SELECT * FROM $tableName WHERE STATION_NETWORK = '$stationFilter' AND VERTICAL = '$verticalFilter' AND CREATIVE = '$creativeFilter' AND WK = '$weekFilter'");
$data = array();
while ($row = mysql_fetch_row($result) )
{
$data[] = $row;
}
$finalarray['rowdata'] = $data;
您可以想象的不起作用,因为如果这些字段中的任何一个为空 - 查询失败(或者不返回任何内容)。
显然,如果某些变量为空,那么创建这样的“静态”查询确实很困难。
动态创建该查询的最佳方法是什么,以便它只输入非空的查询,然后添加到查询中,以便它可以成功完成并显示相应的数据?
答案 0 :(得分:31)
只检查变量是否包含值,如果是,则构建查询,如下所示:
unset($sql);
if ($stationFilter) {
$sql[] = " STATION_NETWORK = '$stationFilter' ";
}
if ($verticalFilter) {
$sql[] = " VERTICAL = '$verticalFilter' ";
}
$query = "SELECT * FROM $tableName";
if (!empty($sql)) {
$query .= ' WHERE ' . implode(' AND ', $sql);
}
echo $query;
// mysql_query($query);
答案 1 :(得分:0)
$filter = array();
if ($_GET['station'] != '')
{ $filter[] = 'STATION_NETWORK = '.$_GET['station'];}
if ($_GET['vertical'] != '')
{ $filter[] = 'VERTICAL = '.$_GET['vertical'];}
if ($_GET['creative'] != '')
{ $filter[] = 'CREATIVE = '.$_GET['creative'];}
if ($_GET['week'] != '')
{ $filter[] = 'WK = '.$_GET['week'];}
$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $filter);
$result = mysql_query($query);
...
但是如果在GET中推送表行的名称会更好; $ _GET ['STATION_NETWORK'] ---有些像这样;
then you make
foreach ($_GET as $key => $value)
{
if ($value != '')
{ $filter[] = $key.' = '.$value;}
}
或尝试
$filter = array('STANTION_NETWORK' => $_GET['station'],
'VERTICAL' => $_GET['vertical'],
'CREATIVE' => $_GET['creative'],
'WK' => $_GET['week']);
$query_array = array();
foreach ($filter as $key => $value)
{
if ($value != '')
{ $query_array[] = $key.' = '.$value;}
}
$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $query_array);
$result = mysql_query($query);