【问题标题】:SELECT * FROM table WHERE (value in cell as array) = $searchid [duplicate]SELECT * FROM table WHERE(单元格中的值作为数组)= $searchid [重复]
【发布时间】:2014-09-17 16:49:50
【问题描述】:

我有一个 db_table,其中一些单元格包含逗号分隔的数组,以将它们链接到不同表列中的所有相应行,例如 [846,1400,1657]。

那么我如何选择该单元格在数组中具有一个匹配值的所有行?

$result = "";
$searchid = $_POST['id'];

$query = mysql_query("SELECT * FROM Company WHERE City/*<-the array*/ LIKE '%$searchid%'");
$count = mysql_num_rows($query);

if($count == 0){
    $result .= "no companies";
} else {
    while($row = mysql_fetch_array($query)){
        $name = $row['Name'];
        $result .= "<div class=\"result\">$name </div>";

    }
}

echo $result;

这会给出所有具有 $searchid 的公司,但如果 $searchid = 25,它将返回该列中具有 25 的公司以及具有例如 250 和 725 的公司。:/

没有通配符:

$query = mysql_query("SELECT * FROM Company WHERE City/*<-the array*/ = '$searchid'");

将返回该单元格中仅包含 $searchid 的行,例如,如果 $searchid = 25,则单元格为 [25] 而不是 [25,456] 或 [12,13,25] 的单元格

我已经观察了 48 小时并尝试了我发现的所有内容,认为这应该很容易破解。 我错过了什么???

【问题讨论】:

  • 您可以尝试使用IN Operator - WHERE (expr|column) IN ('value1','value2',...)
  • @Fred-ii- 我认为您不能将 LIKEIN 运算符结合使用,但我可能错了。
  • 你的数据库设计很差。公司和城市实体之间似乎存在多对多的关系。在这种情况下,有第三个表将每个公司与其所在的城市相关联。然后,在查询中加入这些表。
  • @DRD 这种关系更像一对多,就像国家和城市一样。
  • 好像一个公司可以在很多城市,一个城市可以有很多公司。没有?

标签: php mysql sql arrays explode


【解决方案1】:

FIND_IN_SET 函数可能适用于此。这是一个例子:

SELECT * FROM Company WHERE FIND_IN_SET('25', City) > 0

该示例假定City 列是具有逗号分隔列表的列;我想这就是你的问题所说的。

【讨论】:

  • 成功了!非常感谢!一个问题,为什么“> 0”是必要的?
  • 如果 City 的值为 '13,250,25,40',那么 FIND_IN_SET('25', City) 将返回 3,因为 25 是逗号分隔列表中的第三项。如果在逗号分隔的列表中找不到 25,则 FIND_IN_SET 将返回零。所以“> 0”只是表示在列表中的某处找到了“25”。希望这是有道理的:)另外 - 如果这仍然对你有用,你能接受我的回答吗?这样其他有类似问题的人就会知道它有效。谢谢!
  • 哦,这说明了。抱歉,本站新手,已接受回答。
【解决方案2】:

你可以尝试使用like语句:

SELECT * FROM Company WHERE City LIKE "%25%";

显然,这也会选择 250 的,但这是一个开始。

【讨论】:

    【解决方案3】:

    你不能在mysql中做split,你应该使用过渡表:

    city_company
    ------------
    id_city
    id_company
    

    您可以在哪里存储所有这些关系。

    尽管您可以使用like 进行快速肮脏的破解。 你可以这样做:

    $query = mysql_query("SELECT * FROM Company WHERE concat(',',City,',') LIKE '%,$searchid,%'");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多