从具有多行的选择中创建数组

时间:2014-07-18 18:41:11

标签: php arrays select implode

我在这里尽力为我的问题寻找解决方案,但没有运气。 我在我的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"在我的数据库中,不能一起被杀死。我怎么想这样做?拜托,我感谢任何帮助。

3 个答案:

答案 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 . ")");
}

GROUP_CONCAT