2014-01-13 24 views
0

您好所有插入的,repatation在mysql數據庫

我在現場工作人會員可以發送消息到所有的他/她的朋友..

所以他們所有的朋友都存儲在一個陣列,如:

$selectfrnds=mysql_query("select sender_id,receiver_id from fk_friends where (sender_id='$id' or receiver_id='$id') and friendtofriend='freq' "); 
$friendis=array(); 

我也受到了牽連查詢到一個變量,現在所有的朋友都表示:

$frndsall='4','8','2','12','13','14','15','16','18','19','21','23','24','27','35','36','40','43','29','45','44','38','46','22','1' 

所以我只想問:如何插入將向所有這些ID發送消息的查詢?

我想是這樣的:

insert into tablename (message,id// id of friend) values ('$message//this is same','$xyz// which is stored into varialbe $frndsall one by one it should insert with all the values') 

任何幫助,請...

回答

0

可以通過首先準備一個選擇語句來生成想要插入的所需結果集,然後在INSERT之前添加批量插入。

INSERT INTO tablename (message, id) 
SELECT '$message', receiver_id 
FROM fk_friends 
WHERE (sender_id='$id' or receiver_id='$id') AND friendtofriend='freq' 

如果你的數據庫抽象層支持預處理語句,這樣的事情可能是這樣做的查詢的最佳方式。

$db->query($db->prepare(' 
    INSERT INTO tablename (message, id) 
    SELECT ?, receiver_id 
    FROM fk_friends 
    WHERE (sender_id=? or receiver_id=?) AND friendtofriend=? 
'), array($message, $id, $id, 'freq'))); 

否則,如果不使用準備好的語句,確保從數據庫中查詢它,使用相關的避開功能爲您的訪問數據庫的方法之前,適當地插入到查詢中的所有數據。

希望有所幫助。

1

使用Prepared Statementsforeach loop

$stmt = $pdo->prepare(
    "INSERT INTO tablename (message, id) VALUES (:message, :id)"); 
$stmt->bindParam(':message', $message); 
$stmt->bindParam(':id', $id); 

foreach ($frndsall as $frndId) { 
    $id = $frndId; 
    $stmt->execute(); 

} 
0

你可以做的foreach插入,但這種解決方案將壞的真實項目中,用戶將有超過3K的朋友。

這裏有一個關於數據庫架構的問題。 你說:

成員可以發送消息到所有的他/她的朋友

如果你想添加的可能性來發送消息所有,將更好地使用單獨的表像

`mass_messages` 
id (int 11) 
sender_id (int 11) 
message (text) 
send_date (timestamp) 

你也可以創建另一個表來存儲誰已經閱讀您的留言的朋友。 但是,如果您嘗試將消息發送給除少數朋友之外的所有人,則此方法無用。