【问题标题】:Mysql search using multiple and varying combinations of valuesMysql搜索使用多个不同的值组合
【发布时间】:2015-06-08 01:06:30
【问题描述】:

我正在寻求建立一个程序来帮助我组织我的 Magic The Gathering 收藏。在这一点上,我正在研究高级搜索。今天我已经走了很长一段路,但是我的最新挑战摆在我面前。以前,我一直在努力在高级搜索中集成复选框。感谢 Stack Exchange 的几个小时的工作和你们所有人的慷慨帮助(谢谢,我真的在这里学到了很多东西)我能够克服这个挑战。新的挑战是偶数,嗯,挑战者 :) 这就是我要面对的。

在万智牌聚会中,卡片分为多种颜色。例如,一张卡片可以是:

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

也可以是以上颜色的任意组合。所以一张卡片也可以是:

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

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

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

红牌的价值是: 回复

等等

大家对这个有什么想法吗?对我来说似乎很难,并且一如既往地高度赞赏帮助。我知道你们可能已经厌倦了为像我这样的人做很多牵手,但我保证在我伸出手之前我会进行很多思考、研究和尝试。

一如既往的亲切问候 酸杰克

【问题讨论】:

  • 你能发布你的表结构/数据吗?这会让我们有一个更清晰的视野。
  • @hzq.我想我想通了,我发布了我的答案。如果您知道更优雅的方法,请随时扩展答案:)

标签: php mysql


【解决方案1】:

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

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

对于其他有类似问题的人,可以这样做!

【讨论】:

  • 您可以勾选您自己的答案以表明此问题已解决。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2014-07-31
  • 2014-12-16
相关资源
最近更新 更多