我有一个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小时并尝试了我发现的一切,认为这应该是一个容易破解的。 我错过了什么?
答案 0 :(得分:0)
您可以尝试使用like语句:
SELECT * FROM Company WHERE City LIKE "%25%";
显然,这会选择250也是,但这是一个开始。
答案 1 :(得分:0)
你不能在mysql中进行拆分,你应该使用过渡表:
city_company
------------
id_city
id_company
你可以存储所有这些关系。
虽然您可以使用like
进行快速肮脏的黑客攻击。
您可以这样做:
$query = mysql_query("SELECT * FROM Company WHERE concat(',',City,',') LIKE '%,$searchid,%'");
答案 2 :(得分:0)
FIND_IN_SET
功能可能适用于此功能。这是一个例子:
SELECT * FROM Company WHERE FIND_IN_SET('25', City) > 0
该示例假定City
列是以逗号分隔列表的列;我认为这就是你的问题。