我一直在通过一个查询读取用于使用数组对多行执行SQL函数的优化例程。我的问题特别涉及PHP/MySQL。
我允许用户在我正在开发的系统中创建一个产品,然后为所述产品创建自定义属性。这个问题与产品删除时的清理过程有关,因为产品数据、功能数据和功能选项都存储在不同的表中。
到目前为止,这是我目前的清理程序:
$feature_cleanup = array();
$result = mysql_query("SELECT * FROM features WHERE feature_parent = $parent_id");
if($result && mysql_num_rows($result) > 0) {
while($assoc = mysql_fetch_assoc($result) $feature_cleanup[] = $assoc['id'];
@mysql_query("DELETE FROM features WHERE feature_parent = $parent_id");
// TODO: Use $feature_cleanup to delete feature options
}我目前的想法是简单地做:
$cleanup_list = implode(',', $feature_cleanup);我是否可以简单地将$cleanup_list作为IN传递,或者是否需要在其周围加上括号,还是必须将其进一步处理为字符串?
@mysql_query("DELETE FROM feature_options WHERE option_parent IN $cleanup_list");或者:
@mysql_query("DELETE FROM feature_options WHERE option_parent IN ($cleanup_list)");发布于 2014-01-03 20:23:18
我建议你用子查询
DELETE FROM features WHERE feature_parent IN (SELECT * FROM features WHERE feature_parent = $parent_id)不确定我是否得到正确的Sub查询,以满足您的需要,但我希望您得到的想法。
发布于 2014-01-03 20:19:56
“我是否可以简单地将$cleanup_list作为IN传递,或者是否需要在其周围加上括号,还是必须将其进一步处理为字符串?”
这个问题的答案是,您需要将IN子句包装在parens中,以便将其描述为一个集合,包括一个值。
但是,如果将值存储在不同的表中,所有这些值都需要同时删除,则应该在数据库本身中小心地使用级联删除来处理这些值。例如,如果一个产品被删除,那么该删除就应该被级联到功能突出的产品上,这样就不会留下产品的痕迹。不想要一个不卖的产品。让数据库来做这项工作。
https://stackoverflow.com/questions/20911956
复制相似问题