Mysql搜索使用多个不同的值组合

时间:2015-06-08 01:06:30

标签: php mysql

我正在寻求建立一个程序来帮助我组织我的Magic The Gathering系列。此时我正在进行高级搜索。我今天做了很长的路,但我最新的挑战在我面前。以前我一直在努力在我的高级搜索中集成复选框。感谢几个小时的工作以及Stack Exchange的所有人的慷慨帮助(谢谢,我在这里真正学到了很多东西)我能够克服这一挑战。新的挑战是甚至,嗯challengier :)这是我反对的。

在魔术聚会中,卡片分为多种颜色。例如,卡可以是:

蓝色,白色,红色,绿色,黑色或无色。

它也可以是上述颜色的任何组合。所以卡也可以是:

红/蓝,蓝/红,蓝/红/绿,白/黑/绿,黑/白等。

我在搜索参数中使用复选框,允许用户输入他们要搜索的颜色组合。我已经实现了这样的查询:

SELECT * FROM inventory WHERE color IN ( "R","G","B") 

使用此代码:

//Color Array

$whereColor = array();
if (isset($_GET['white'])){
    $white = $_GET['white'];
    $whereColor[] = mysql_real_escape_string($white);
    }

if (isset($_GET['blue'])){
    $blue = $_GET['blue'];
    $whereColor[] = mysql_real_escape_string($blue);
}

if (isset($_GET['red'])){
    $red = $_GET['red'];
    $whereColor[] = mysql_real_escape_string($red);
}

if (isset($_GET['green'])){
    $green = $_GET['green'];
    $whereColor[] = mysql_real_escape_string($green);
}

if (isset($_GET['black'])){
    $black = $_GET['black'];
    $whereColor[] = mysql_real_escape_string($black);
}

if (isset($_GET['colorless'])){
    $colorless = $_GET['colorless'];
    $whereColor[] = mysql_real_escape_string($colorless);
}

//Build The Query

if(!empty($whereColor)) {
    $where[] ='color IN ( "'. implode('","', $whereColor) . '")';
}

此解决方案非常适合查找只有任何一种颜色的卡片。例如,只有白卡,或只有蓝卡,但不适用于颜色组合。我试图找到一种方法来修改它,这样如果一个人选择了例如蓝色,红色,那么搜索将显示每个具有这些颜色组合的卡片。使用这些颜色的卡片变化将是(为了举例):

红色/蓝色

蓝色/红色

红色

蓝色

我的数据库使用字母将颜色存储在一列中以定义颜色,但我无法对其进行更改。例如,数据库中红/绿卡的值为: RG

绿色/红色卡的价值是: GR

红牌的价值是: [R

对这一个人的任何想法?对我来说似乎很难,而且一如既往地非常感谢帮助。我知道你们可能已经厌倦了为像我这样的人做了很多手工操作但是我保证在我伸出手之前我会进行大量的思考,研究和尝试。

亲切的问候 酸杰克

1 个答案:

答案 0 :(得分:2)

我答应了我自己的:)这是我提出的解决方案,但如果有更好的方法,可以随意扩展。基本上只需要修改一段代码。将最后一行代码修改为:

if(!empty($whereColor)) {
    $where[] ='color REGEXP "'. implode('|', $whereColor) . '"';
}

对于遇到类似问题的其他人,就可以做到!