具有不相似特定id的PHP MySQL查询

具有不相似特定id的PHP MySQL查询,php,mysql,Php,Mysql,我有两张桌子。第一个是消息,第二个是房间。messages表中的msg_id与room表中的id相同。我要做的是选择所有msg_id,并为每个msg_id运行一个查询,删除其id与msg_id不匹配的所有房间: 我的代码: $result = mysql_query("SELECT `msg_id` FROM `messages`"); while($row = mysql_fetch_array( $result )) { $me = $row[0]; //$me as a strin

我有两张桌子。第一个是消息,第二个是房间。messages表中的msg_id与room表中的id相同。我要做的是选择所有msg_id,并为每个msg_id运行一个查询,删除其id与msg_id不匹配的所有房间:

我的代码:

$result = mysql_query("SELECT `msg_id` FROM `messages`");
while($row = mysql_fetch_array( $result )) {
    $me = $row[0]; //$me as a string
    $int = (int)$me;//transform $me's value to int

  $result2 = mysql_query("DELETE FROM `room` WHERE `id` NOT LIKE '%" . $int . "%'");}
$result2查询将从文件室表中删除所有条目,无论$int变量的值是多少。这意味着支票无效。如果我将$result2更改为此,即:

$result2 = mysql_query("DELETE FROM `room` WHERE `id` NOT LIKE '%86%'");
除id=86的房间条目外,所有条目都将被删除。它工作正常


基本计划是,我必须保留所有与msg_id匹配的房间条目。

可以使用子查询吗

从id未插入的房间中删除从消息中选择msg_id

如果无法使用子查询,可以尝试:

$result = mysql_query("SELECT `msg_id` FROM `messages`");
$ids = [];
while($row = mysql_fetch_array($result)) {
    $ids[] = (int) $row[0];
}
$result2 = mysql_query("DELETE FROM `room` WHERE `id` NOT IN (" . implode(',', $ids) . "));
请不要使用mysql\u查询,因为它已被弃用

请尝试此查询

delete from 'room' where 'id' not in(select 'msg_id' from 'messages');
如果它不适合您,您可以尝试不等于查询


你是对的,它对861或786房间不起作用,但我的声明是,它在使用int时起作用,但在使用php变量时不起作用。我在使用php 5.1的不可更新机器上工作,所有运行的查询都使用mysql\u query,因此我基于此运行cron作业,否则我不会。子查询不工作,所以ids数组解决方案修复了它。谢谢你@kallosz
delete from 'room' where 'id' not in(select 'msg_id' from 'messages');
delete from 'room' where 'id' <>(select 'msg_id' from 'messages');