繁体   English   中英

从MySQL返回的结果相同-我知道为什么,但不知道解决方案

[英]Same results returned from MySQL - I know why but don't know solution

我要实现的目标:我正在尝试创建一个过滤器,学生可以用来按级别,性别或主题过滤我网站上的导师。 为此,我创建了一个复选框,当这些复选框提交为“ ON”或检查查询时,它会运行以查找符合该条件的导师。 我使用了while循环来检查选中了哪些复选框。

发生了什么:查询返回正确的结果,但是说一位导师教数学和英语,然后他将两次返回结果div。 这是因为导师完成两个查询,并且返回两次。

我不知道如何解决此问题,因此在此先感谢,感谢您的帮助,以下是HTML和PHP编码的相关部分。

<form action="" method="get" >
  Name: 
    <input type="text" name="tutor_name"><br>
  Level:
    <input type="checkbox" name="check[]" value="gcse">GCSE
    <input type="checkbox" name="check[]" value="a_level">A Level<br>
  Gender:
    <input type="checkbox" name="check[]" value="male">Male
    <input type="checkbox" name="check[]" value="female">Female<br>
  Subject:
    <input type="checkbox" name="check[]" value="maths">Maths
    <input type="checkbox" name="check[]" value="science">Science
    <input type="checkbox" name="check[]" value="english">English<br>
  <input type="submit" value="Go!">

<?php

if(!empty($_GET['check'])){
  foreach($_GET['check'] as $check) {

  $check = mysql_query("SELECT `tutor_id` FROM `tutors` WHERE $check=1");

  while($row = mysql_fetch_array($check)){
    $tutor_data = tutor_data($row['tutor_id'], 'first_name','image','rating','bio','last_name');

    echo "<br><h3> " . $tutor_data['first_name'];
    echo " " . $tutor_data['last_name'];
    echo "</h3><br>" . $tutor_data['bio'];
    echo "<br>Rating: " . $tutor_data['rating']. "<br><br>";
    }
  }
    $number= mysql_num_rows($check);
      echo "<b>$number</b> results";
}

您应该有一个查询,一次简单地一次检查多个值:

SELECT DISTINCT ...
WHERE 1 in (maths, english, male, a_level)

现在,您正在彼此独立地运行多个查询,因此,有理由为每个具有两个或多个要搜索的属性的导师获得一个重复的导师。 如果您无法重写为单查询模型,则必须获取每个查询的结果,然后将其组合到PHP中以过滤重复项。

另外,请注意,您编写的查询容易受到SQL注入攻击的攻击 在解决此问题之前,请勿在生产系统上使用该代码。

您可以尝试:

$check = mysql_query("SELECT `tutor_id` FROM `tutors` WHERE $check=1 GROUP BY `tutor_id`");

编辑:

或者也许是SELECT DISTINCT...可以工作

尝试这个

if(!empty($_GET['check'])){
  $chks = array(); //Declare Array
  foreach($_GET['check'] as $check) {
    $chks[] = "$check=1"; // Add 'checkboxvalue=1' to the array
  }
  $check = implode(' OR ',$chks); // Join the array with ' OR '
  $check = mysql_query("SELECT `tutor_id` FROM `tutors` WHERE $check");

    $number= mysql_num_rows($check);
      echo "<b>$number</b> results";

  while($row = mysql_fetch_array($check)){
    $tutor_data = tutor_data($row['tutor_id'], 'first_name','image','rating','bio','last_name');

    echo "<br><h3> " . $tutor_data['first_name'];
    echo " " . $tutor_data['last_name'];
    echo "</h3><br>" . $tutor_data['bio'];
    echo "<br>Rating: " . $tutor_data['rating']. "<br><br>";
    }

}

在这里,我在循环中建立where子句并执行单个查询。

暂无
暂无

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

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