1

我正在尝试创建一个脚本,该脚本将在表中搜索与另一个表中的艺术家姓名不匹配的艺术家姓名

$sql = mysql_query("SELECT artist FROM artists WHERE artist NOT IN (select artist from singer) LIMIT 4") or die(mysql_error());

运行后它将艺术家插入歌手表,然后如果我再次运行它会回来说没有结果,而不是跳过艺术家表中的前 4 位艺术家,因为他们在歌手表中并抓住接下来的 4

我究竟做错了什么?

4

1 回答 1

0

SELECT你的说法没有错。这个SQL Fiddle证明了这一点。INSERT使用模式部分底部的注释语句,它返回前四个可行记录(如预期的那样)。然后,如果您取消注释这些行并重建架构,您会发现它返回接下来的四个可行记录(如预期的那样)

因此,如果您实际上是在收集它们之后但要求更多之前INSERT检索到的四个,那么该语句就有问题。INSERT

相反,如果您在要求更多之前没有发出in ,那么您将需要一个更动态的 SQL 语句,而 Fiddle 也显示了该语句(尽管是静态的)。用于更动态语句的 PHP 可能如下所示:INSERTsinger

$offset = 0;
$sql = true;

while ($sql) {
    $sql = mysql_query("SELECT artist FROM artists WHERE artist NOT IN (select artist from singer) LIMIT $offset, 4") or die(mysql_error());
    $offset += 4;
}
于 2013-05-17T14:45:04.467 回答