Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: INSERT при определенном условии
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
Доброго времени суток! Не то чтобы проблема, но всё же ... Предположим, что пользователь может добавить только один комментарий к каждой статье. В таблице коментариев `comments`, кроме остальных полей, есть поля: `article_id` (ID статьи) и `user_id` (ID юзверя). Если без всяких премудростей, то перед добавлением комментария, можно проверить есть ли хоть одна запись, где присутствует и первый, и воторой параметры сразу.
И если запись не найдена, то даём добро на добавление нового комментария. И вот я задумался, можно ли как-то это выполнять в одном запросе. Т.е. добавлять запись при определенном условии, что-то типа INSERT ... IF([condition]). Применить для данной задачи конструкцию INSERT IGNOR не получится, т.к. поля не могут быть уникальными. Пересмотрел мануалы, но толи пропустил, толи действительно нет такого аналога.
EuGen
Отправлено: 23 Ноября, 2012 - 12:47:58
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
0. Создать уникальный ключ по полям (article_id, user_id)
1. Применять (экранирование опущено)
- или INSERT IGNORE (в зависимости от желаемого результата)
Deonis пишет:
т.к. поля не могут быть уникальными
- Сами по себе да. Но, следуя описанной логике, уникальными должны быть пары (article_id, user_id) - см. пункт 0 выше.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Deonis
Отправлено: 23 Ноября, 2012 - 12:56:13
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
EuGen пишет:
0. Создать уникальный ключ по полям (article_id, user_id)
1. Применять
1. Нам не нужно обновлять, а добавлять запись или нет при определенном условии.
2. Повторю, что уникальные ключи отпадают, т.к. значения в полях article_id и user_id могут повторяться, НО не может повторяться комбинация значений этих полей, т.е.
article_id =1 AND user_id =1// юзер добавил комент к первой статье
article_id =2 AND user_id =1// этот же юзер добавил комент ко второй статье
// Эти комбинации(!), а не значения - уникальны
EuGen
Отправлено: 23 Ноября, 2012 - 12:57:26
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Deonis пишет:
2. Повторю, что уникальные ключи отпадают, т.к. значения в полях article_id и user_id могут повторяться, НО не может повторяться комбинация значений этих полей, т.е.
EuGen пишет:
0. Создать уникальный ключ по полям (article_id, user_id)
- в чем трудность создать индекс по двум полям(ровно это и имелось ввиду) сразу?
Deonis пишет:
Нам не нужно обновлять, а добавлять запись или нет при определенном условии.
EuGen пишет:
- или INSERT IGNORE (в зависимости от желаемого результата)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
caballero
Отправлено: 23 Ноября, 2012 - 13:01:58
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
а что старый добрый if else уже не катит? Не те понты писать такие примитивные конструкции?
- да, так создастся ключ по двум полям. И уникальность будет проверяться уже у конкретной пары значений, а не у значения одного поля.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Deonis
Отправлено: 23 Ноября, 2012 - 13:46:06
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
EuGen, спасибо за помощь. И не подскажите по поводу того, как запросом можно создать индекс по этим полям? Или это можно сделать только при создании таблицы?
EuGen
Отправлено: 23 Ноября, 2012 - 13:47:23
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.