2013-05-17 113 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

相關問題