0

我想选择正在返回值的行。如果他们选择了MaleFemale在选择框中,我希望它搜索那个。那部分工作正常。但是,如果他们选择Either,我想说 MySQL 应该查看列是否包含MaleorFemale并返回任何结果。

请注意,如果可能,我不想根据代码的编写方式在查询中使用 OR 语句。

我尝试了以下方法,但似乎没有用。这些值来自具有或的表单中Either的选择框。MaleFemale

if ($postgender == "either")
{
    $male = "Male";
    $female = "Female";
    $postgenderuse = ($male || $female);
}
else {
    $postgenderuse = $postgender;
}

$query4 = mysql_query("SELECT * FROM tennis WHERE gender='$postgenderuse' ORDER BY playerid DESC LIMIT 0,20");
4

4 回答 4

1

开始从语句创建查询,还检查表单是否正在发送 3 个值之一(只是为了确保)

if ($postgender == "Either")
{
    $postgenderuse = " ( `gender`='Male' OR `gender`='Female' ) ";
}
elseif ($postgender == "Male" || $postgender == "Female") {
    $postgenderuse = " `gender`='".$postgender."' ";
}
else {
    die('Error, no gender selected');
}

$query4 = mysql_query("SELECT * FROM `tennis` WHERE ".$postgenderuse." ORDER BY `playerid` DESC LIMIT 0,20");
于 2012-08-18T08:00:30.947 回答
1

假设您以二进制方式处理性别,仅包含两个选项(男性,女性):

$sql = "SELECT * FROM tennis";

if(in_array($postgender, array("Male", "Female"))
{
     $sql .= " WHERE gender=".$postgender;
}

$sql .= " ORDER BY playerid DESC LIMIT 0,20)";
$query4 = mysql_query($sql);
于 2012-08-18T08:02:33.830 回答
0

如果是,则更改您的查询以进行通配符搜索。

SELECT * FROM 网球 WHERE gender LIKE '$postgenderuse'

这样,当他们选择其中一个时,您可以将 postgenderuse 设置为 % 符号。

虽然,在查询中使用 OR 并根据条件构建查询可能是一个更好的主意,例如:

if($postgender == "Male") {
   $condition = "WHERE gender='Male'";
} else if($postgender == "Female") {
   $condition = "WHERE gender='Female'";
} else {
   $condition = "";
}
$query = "SELECT * FROM tennis " . $condition . " ORDER BY BLAH";

无论如何,任何一种方式都应该有效。能够从条件构造查询是 php 强大功能的一部分。

~ 丹

于 2012-08-18T08:04:27.380 回答
0

如果您使用 Bitwise 而不是 String 作为 field ,您尝试过的解决方案将起作用gender

我的建议是使用 SQL IN 函数。就像是:

$query = "SELECT * FROM tennis WHERE gender IN ('" + implode("', '", $postGenderArray) + "')";
于 2012-08-18T08:48:18.927 回答