【发布时间】: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- 我认为您不能将
LIKE与IN运算符结合使用,但我可能错了。 -
你的数据库设计很差。公司和城市实体之间似乎存在多对多的关系。在这种情况下,有第三个表将每个公司与其所在的城市相关联。然后,在查询中加入这些表。
-
@DRD 这种关系更像一对多,就像国家和城市一样。
-
好像一个公司可以在很多城市,一个城市可以有很多公司。没有?
标签: php mysql sql arrays explode