具有条件子选择的MySQL复杂插入?

时间:2012-01-12 02:44:52

标签: php mysql insert

因此我无法正确创建此查询。

基本上,我想在通知表中插入多行,插入的每一行都有一个不重复的唯一收件人ID,收件人ID是通过检查注释的匹配target_id或者id的id来确定的。流和检查与每个评论/流相关联的author_id。此外,我希望查询排除所选的author_id与发件人ID匹配的行插入。

下面是一个粗略的sql标记,基本上是我需要的。

INSERT INTO
notification (type,
target_id,
sender_id,
recipient_id,
data,
timestamp,
is_unread)
SELECT DISTINCT 'comment', 
'$id',
'$senderId',
(comment.author_id OR stream.author_id), 
'$dataArray',
'$timestamp', 
'1'
FROM 
    stream,
    comment
WHERE 
    stream.author_id != '$senderId'
    AND comment.author_id != '$senderId'
    AND stream.id = '$id'
    OR comment.target_id = '$id'

1 个答案:

答案 0 :(得分:0)

你所拥有的似乎很好。您可以尝试使用COALESCE(stream.author_id, comment.author_id),因此如果评论author_id为空(例如,因为author_id是发件人),它将回退到流的author_id。为此,您必须在流上加入外部联接注释,stream.author_id != '$senderId'条件必须是ON子句的一部分。