从MySQL数据库构造表,然后能够在不重新加载页面的情况下过滤表

时间:2017-07-22 05:46:12

标签: php html mysql filtering

我正在开发一个网站,该网站将MySQL数据库中的排行榜数据作为表格呈现,用户可以对其进行过滤和搜索。我能够通过PHP调用构建表,例如

  

php echo $ row ['ranking'];

同样,我能够创建一个将MySQL查询限制为每页50行的分页。

我无法实现的是过滤/搜索数据,以及不需要重新加载页面的分页。我试图通过PHP变量创建过滤

$sql = "SELECT * FROM New_2v2_Data $filters"; 

但是除了编辑PHP代码之外无法让它工作。

                $racevar = '%';
                $classvar = '%';
                $specvar = '%';
                $playervar = '%';
                $realmvar = '%';
                $factionvar = '%';
                $r1 = '0';
                $r2 = '1800';

                $race ="raceId LIKE '$racevar'";
                $class = "classId LIKE '$classvar'";
                $spec ="specId LIKE '$specvar'";
                $player ="player LIKE '$playervar'";    
                $realm ="realmName LIKE '$realmvar'";
                $faction="factionId LIKE '$factionvar'";
                $rating ="rating between $r1 and $r2";

$filters = "WHERE $race AND $class AND $spec AND $player AND $realm AND $faction AND $rating";

$sql = "SELECT * FROM New_2v2_Data $filters"; 
$rs_result = mysql_query ($sql); //run the query

我找到了各个变量的过滤解决方案,例如名称,但我找不到任何考虑多个变量的内容。即便如此,过滤仅适用于静态的表。

我想也许,如果下拉/复选框是根据所选内容更改PHP变量,然后重新加载表中的PHP以包含附加的“WHERE”语句,则过滤可能有效。

关于如何做到这一点的一些建议会很棒,谢谢。

2 个答案:

答案 0 :(得分:0)

您需要以可以将它们传递给SQL语句的方式使过滤器可选或动态。

您下拉列表的解决方案可能确实是其中之一。您甚至可以通过搜索'进行搜索。输入文本字段。然后你做出你的WHERE声明:

WHERE (`column1` LIKE '%$search%' OR `column2` LIKE '%$search%' OR `column3` LIKE '%$search%',) LIMIT 0,10

答案 1 :(得分:0)

您可以有条件地包含各种限制,并仅从具有某些设置的SQL构建SQL。

$racevar = 'a';     // A value to show when this would be included
$classvar = '%';
$specvar = '%';
$playervar = '%';
$realmvar = '%';
$factionvar = '%';
$r1 = '0';
$r2 = '1800';

$condition= [];
$bindData = [];
if ( $racevar != '%'){
    $condition[] ="raceId LIKE ?";
    $bindData[] = $racevar;
}
if ( $classvar != '%'){
    $condition[] = "classId LIKE ?";
    $bindData[] = $classvar;
}
// Repeat above for all of the conditions
if ( $r1 != 0 or $r2 != 0 ) {
    $condition[] = "rating between ? and ?";
    $bindData[] = $r1;
    $bindData[] = $r2;
}

$sql = "SELECT * FROM New_2v2_Data";
if ( count($condition) > 0 ) {
    $sql .= " WHERE ".implode(' and ', $condition);
}
echo $sql;

这个想法是建立一个条件列表,只有在值具有限制的情况下。然后可以将其添加为where子句。

然后,您可以拥有各种输入字段/选择字段,允许用户选择条件并使用选择调用此例程。

我已经更新了使用绑定变量的答案,因此使用prepare将为您提供更多安全性,然后您可以绑定值或(使用PDO)执行绑定值数组。