2013-05-17 72 views
1

我想创建一个脚本,将在艺术家名称的表格,这并不从另一个表查询结果未在其他表

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

它运行后匹配艺术家名称搜索它插入艺术家如果我再次运行它,它会回来说没有结果,而不是由艺术家表中的前4位艺术家跳过,因为他们在歌手表中并抓取下一个4

我在做什么错误?

+0

这是因为你'你LIMIT'结果4名下次运行歌手将不匹配你的'不IN'条款,因为它们是'IN' – Fabio

+0

是的,但我不想没有限制地运行它,有没有办法让我可以跳过歌手表中的那些,然后移动到下一个4 – Bren

+0

不要使用mysql_ *函数 - 它们已被弃用! – user4035

回答

0

您的SELECT声明没有任何问题。这SQL Fiddle证明了这一点。通过在架构部分底部注释INSERT声明,它将返回前四个可行的记录(如预期的那样)。然后,如果您取消注释这些行并重新构建模式,您会发现它会返回下一个四条可行的记录(如预期)

所以,如果你实际上发放之前INSERT为检索四个后收集他们,但要求更多的则有有毛病INSERT声明。

相反不过,如果你是发出INSERTsinger之前要求更多,那么你就需要一个更加动态的SQL语句,以及小提琴表明,声明(尽管静态)为好。更加动态的语句中的PHP可能是这样的:

$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; 
} 
+0

这导致页面永不加载,在页面的底部我有一个插入它插入4收集它的歌手。但如果我停止脚本并重新启动它,而不是绕过艺术家的前4行(因为他们在歌手表中)并收集新的4,它只是返回说没有结果 – Bren

相关问题