繁体   English   中英

使用多个选择框过滤MySQL数据

[英]Using multiple select boxes to filter MySQL data

我有一个PHP回显的表,其中显示了我的所有数据。 我正在尝试根据下拉列表和提交按钮来过滤数据。 每个单独的下拉查询都可以100%运行...仅靠它们自己而不需要elseif。 即,如果我一个接一个地测试它们,并注释掉其他过滤器,那么当它们都没有注释时,过滤器就不会起作用。 这是我的代码:

if ($_POST['raceName']!="Select a race") {
                $raceName = mysqli_real_escape_string($mysqli, $_POST["raceName"]);
                $filter = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear
                            FROM Athlete AS a 
                            INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                            INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID
                            WHERE r.RaceName= '$raceName'
                            ORDER BY a.Surname";
            } elseif ($_POST['athlete']!="Select an athlete") {
                $athlete = mysqli_real_escape_string($mysqli, $_POST["athlete"]);
                $firstWord = explode(' ',trim($athlete));
                $firstName = $firstWord[0];
                $lastWord = explode(' ', $athlete);
                $surname = array_pop($lastWord);
                $filter = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear  
                            FROM Athlete AS a 
                            INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                            INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID
                            WHERE a.FirstName= '$firstName' AND a.Surname = '$surname'
                            ORDER BY a.Surname";
            } elseif ($_POST['distance']!="Select a distance") {
                $distance = mysqli_real_escape_string($mysqli, $_POST["distance"]);
                $filter = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear 
                            FROM Athlete AS a 
                            INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                            INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID
                            WHERE r.Distance= '$distance'
                            ORDER BY a.Surname";
            } elseif ($_POST['clubYear']!="Select a club year") {
                $clubYear = mysqli_real_escape_string($mysqli, $_POST["clubYear"]);
                $filter = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear
                            FROM Athlete AS a 
                            INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                            INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID
                            WHERE r.ClubYear= '$clubYear'
                            ORDER BY a.Surname";
            } else {
                $filter = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear 
                                FROM Athlete AS a 
                                INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                                INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID
                                ORDER BY a.Surname";
            }

            $result = $mysqli->query($filter);

如您所见,我将它们与elseif进行了合并,因为我打算合并查询,以便用户可以使用任意数量的下拉列表进行过滤。 现在,我希望每个人都可以自己工作,但是要使用elseif方法。 目前,此代码适用于raceName,但仅此而已。 它只是返回一个空白表。 有任何想法吗?

因为代码的第一位运行不会到达elseif的。 请改用switch语句,或者直接取出else的

我设法解决此问题,而不是检查下拉列表是否等于下拉列表所说的内容,而是检查下拉列表是否为null。 然后,我删除了else语句并合并了查询。 完整代码如下:

$query = "SELECT a.MembershipID, a.FirstName, a.Surname, t.RaceID, t.Time, r.RaceID, r.RaceName, r.Distance, r.ClubYear
                            FROM Athlete AS a 
                            INNER JOIN Time AS t  
                                ON a.MembershipID=t.MembershipID
                            INNER JOIN Race AS r
                                ON t.RaceID=r.RaceID";
            if ($_POST['raceName']!= null) {
                $raceName = mysqli_real_escape_string($mysqli, $_POST["raceName"]);
                $filter = " WHERE r.RaceName= '$raceName'";
                $query .= $filter;
            } 
            if ($_POST['athlete']!= null) {
                $athlete = mysqli_real_escape_string($mysqli, $_POST["athlete"]);
                $firstWord = explode(' ',trim($athlete));
                $firstName = $firstWord[0];
                $lastWord = explode(' ', $athlete);
                $surname = array_pop($lastWord);
                $filter = " WHERE a.FirstName= '$firstName' AND a.Surname = '$surname'";
                $query .= $filter;
            } 
            if ($_POST['distance']!= null) {
                $distance = mysqli_real_escape_string($mysqli, $_POST["distance"]);
                $filter = " WHERE r.Distance= '$distance'";
                $query .= $filter;
            } 
            if ($_POST['clubYear']!= null) {
                $clubYear = mysqli_real_escape_string($mysqli, $_POST["clubYear"]);
                $filter = " WHERE r.ClubYear= '$clubYear'";
                $query .= $filter;
            }

            $fullquery = $query . " ORDER BY a.Surname";

            $result = $mysqli->query($fullquery);

现在唯一需要弄清楚的是,如果存在多个查询,如何在WHERE查询之间插入“ AND”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM