我在这里尽力为我的问题寻找解决方案,但没有运气。 我在我的PHP中有一个SELECT来检索一些产品信息,比如他们的ID。
mysql_query("SELECT id_item FROM mytable WHERE status = '0' AND cond1 = '1' AND cond2 = '1'");
每次运行此SELECT时,结果都会得到5行。之后我需要运行DELETE来在我的WHERE条件中使用它们的id_item来杀死这5行。当我手动运行时,例如:
DELETE FROM mytable WHERE id_item IN (1,2,3,4,5);
有效!但我的问题是我不知道如何在PHP中创建一个数组来返回(1,2,3,4,5)作为我的SELECT中的这种数组,因为其他2个条件可能会有所不同我有更多" status = 0"在我的数据库中,不能一起被杀死。我怎么想这样做?拜托,我感谢任何帮助。
答案 0 :(得分:2)
除非显示的内容多于显示的内容,否则您永远不必选择仅确定要删除的内容。只需像在SELECT:
中一样形成DELETE查询WHERE条件DELETE FROM mytable WHERE status = '0' AND cond1 = '1' AND cond2 = '1'
但要回答如何获取ID:
$result = mysqli_query($link, "SELECT id_item FROM mytable WHERE status = '0' AND cond1 = '1' AND cond2 = '1'");
while($row = mysqli_fetch_assoc($result)) {
$ids[] = $row['id_item'];
}
$ids = implode(',', $ids);
立即转移到PDO或MySQLi。
答案 1 :(得分:1)
首先,由于该函数已被弃用,您不应再使用mysql_query
- 请参阅php.net
如果这是一个遗留应用程序而你必须使用mysql_query
,那么你需要遍历mysql_query
返回的资源,这应该看起来像这样
$result = mysql_query("SELECT id_item FROM mytable WHERE status = '0' AND cond1 = '1' AND cond2 = '1'");
$idArray = array();
while ($row = mysql_fetch_assoc($result)) {
$idArray[] = $row['id_item'];
}
if(count($idArray) > 0) {
mysql_query("DELETE FROM mytable WHERE id_item IN (" . implode(',' $idArray) . ")");
}
答案 2 :(得分:0)
如前所述,可能你甚至不需要选择。但您可以进行选择,将所有ID组合在一起,然后将其放入删除IN
。
$result = mysql_query("SELECT GROUP_CONCAT(DISTINCT id_item) AS ids FROM mytable WHERE status = '0' AND cond1 = '1' AND cond2 = '1'");
$ids = mysql_result( $result , 0, 'ids') ; // 1,2,3,4,5
if ($ids != ""){
mysql_query("DELETE FROM mytable WHERE id_item IN (" . $ids . ")");
}