Сложная вставка MySQL с условным подвыбором? - PullRequest
1 голос
/ 12 января 2012

, поэтому у меня возникли проблемы с правильным созданием этого запроса.

По сути, я хочу вставить несколько строк в таблицу уведомлений, каждая вставляемая строка имеет уникальный идентификатор получателя, который не будет повторяться, идентификаторы получателя определяются путем проверки на соответствие target_id комментария или идентификатора поток и проверка идентификатора author_id, связанного с каждым комментарием / потоком. Кроме того, я хочу, чтобы запрос исключал вставку строк для выбранных author_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 голосов
/ 12 января 2012

То, что у тебя есть, кажется нормальным. Вы можете попробовать использовать COALESCE(stream.author_id, comment.author_id), поэтому, если комментарий author_id равен нулю (например, потому что author_id является отправителем), он будет возвращаться к author_id потока. Чтобы это работало, вы должны добавить внешний комментарий к потоку, а условие stream.author_id != '$senderId' должно быть частью предложения ON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...