现在我有像
这样的表格--------------------------
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)
答案 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)
如果字符串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_comboA
和merge_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 %';