我正在开发一个网站,该网站将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”语句,则过滤可能有效。
关于如何做到这一点的一些建议会很棒,谢谢。
答案 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)执行绑定值数组。