![](/img/trans.png)
[英]Select data from multiple tables in MySQL using check boxes and show the table field according to checkbox
[英]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.