如何从mysql中删除具有给定id的记录

时间:2014-08-26 11:17:30

标签: php mysql

现在我有像

这样的表格
--------------------------
merge_id  |  merge_combo |
--------------------------
A1        |   25,9       |
A2        |   25,21      |
A3        |   2,5,15     |
A4        |   2,9,5      |
A5        |   12,19,2    |
A6        |   2,1        |
--------------------------

例如现在如果我传递值9,那么它应该检查merge_combo并删除具有9的行(A1,A4这两个有9)

8 个答案:

答案 0 :(得分:2)

您可以使用find_in_set()

执行此操作
delete from tbl
    where find_in_set(9, merge_combo) > 0;

更大的问题是您将数字存储在字符串中以供列表使用。 SQL具有用于存储列表的这种出色的数据结构 - 它被称为表。在这种情况下,您需要一个联结表,每merge_id行一个行和组合项。

答案 1 :(得分:1)

DELETE from your_table where FIND_IN_SET(9, merge_combo) or merge_combo IN(9)

答案 2 :(得分:0)

您可以使用以下qry

DELETE FROM tbl WHERE merge_combo LIKE '%,9,%' OR merge_combo LIKE '9,%' OR merge_combo LIKE '%,9' OR merge_combo = '9';

答案 3 :(得分:0)

您可以使用Find_In_Set

delete from your_table where FIND_IN_SET(@val, merge_combo)
  

FIND_IN_SET(str,strlist)

     

如果字符串str在,则返回1到N范围内的值   字符串列表strlist由N个子串组成。字符串列表是   由“,”字符分隔的子串组成的字符串。如果   第一个参数是一个常量字符串,第二个参数是一个类型的列   SET,FIND_IN_SET()函数被优化为使用位运算。   如果str不在strlist中,或者strlist是空字符串,则返回0。   如果任一参数为NULL,则返回NULL。此功能不起作用   如果第一个参数包含逗号(“,”)字符,则正确。

答案 4 :(得分:0)

使用以下查询

DELETE FROM tbl WHERE FIND_IN_SET("9",merge_combo)

答案 5 :(得分:0)

不应使用LIKE创建复杂的SQL查询。如果您的数据库设计错误,您的应用也会出错。

相反,规范化甚至针对1NF的数据库。如果您知道必须输出3个组合值,或者为了获得最佳实现,请创建一个包含复合键的单独表,尝试将merge_combo分解为merge_comboAmerge_comboB以及merge_comboC (这样你就可以避免Null值)

PS :仅在您无法更改数据库时使用建议的查询(例如,学习练习以测试您对查询的了解)

答案 6 :(得分:0)

连接:

$mysqli = new mysqli ('localhost', 'admin_user', 'Paradise1191', 'admin_db');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->set_charset("utf8");


选择&删除:

$var = "Your Result";
$array = array();

$query = "SELECT * FROM `TABLE` WHERE 1";

if ($result = $mysqli->query($query)) {

while ($row = $result->fetch_array())
{
    $this_id = $row['merge_id'];
    $var1 = $row['merge_combo'];
    $array = explode(",",$var1 );
    if (in_array($var, $people)) {

    $query = "DELETE FROM `TABLE` WHERE `merge_id` = '$this_id'";
    $mysqli->query($query);        

    }

}
$result->close();
}

答案 7 :(得分:0)

您应该尝试以下查询:

DELETE FROM merge WHERE merge_combo LIKE '% 9 %';