具有不相似特定id的PHP MySQL查询
我有两张桌子。第一个是消息,第二个是房间。messages表中的msg_id与room表中的id相同。我要做的是选择所有msg_id,并为每个msg_id运行一个查询,删除其id与msg_id不匹配的所有房间: 我的代码:具有不相似特定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
$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');