SELECT * FROM表WHERE(单元格中的值作为数组)= $ searchid

时间:2014-09-17 16:49:50

标签: php mysql sql arrays explode

我有一个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小时并尝试了我发现的一切,认为这应该是一个容易破解的。 我错过了什么?

3 个答案:

答案 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列是以逗号分隔列表的列;我认为这就是你的问题。