#php #mysql #phpmyadmin
#php #mysql #phpmyadmin
Вопрос:
Я создаю систему обмена сообщениями и пытаюсь настроить ее так, чтобы у нее был «просмотр беседы» и чтобы пользователи могли отвечать на сообщение. Для этого у меня должен быть основной идентификатор для каждого разговора в таблице, а затем отдельный уникальный идентификатор для каждого сообщения.
Моя проблема в том, что когда я пытаюсь ответить на сообщение, я получаю эту ошибку:
Дублируйте запись ’98’ для ключа 1
Похоже, что это не позволяет мне использовать тот же идентификатор в столбце, но у меня нет «уникального» значения, установленного в таблице AFAIK.
Я также пытался удалить ПЕРВИЧНЫЙ для id
столбца, но получил эту ошибку:
Сообщение:
#1075 — Неправильное определение таблицы; может быть только один автоматический столбец, и он должен быть определен как ключ
Я не понимаю, почему это не позволяет мне вставить тот же идентификатор в id
столбец, потому что, как вы знаете, мне нужен идентификатор для каждого разговора.
mysql_query
, который я использую для вставки ответа в таблицу, является:
$sql = "INSERT INTO messages (id, message_id, to_user, message, subject, from_user, date, time, date_short)
VALUES ('$id', '$message_id', '$to', '$message', '$subject', '$user', '$date', '$time', '$date_short')";
mysql_query($sql) or die(mysql_error());
Заранее спасибо!
Комментарии:
1. Пожалуйста, сбросьте описание вашей таблицы и опубликуйте
2. УНИКАЛЬНЫЙ Да, это ваш ответ… Решение в том, чтобы создать conversation_id…
3. первичные ключи всегда уникальны, и вы пытаетесь вставить строку с первичным ключом, который уже существует. Не пытайтесь группировать диалоги вместе, используя для них один и тот же первичный ключ.
Ответ №1:
Ваш первичный ключ нельзя повторять, иначе он не так полезен как ключ, не так ли? Первичный ключ должен однозначно идентифицировать запись.
Причина, по которой вы получаете ошибку, заключается в том, что для столбца установлен автоматический номер. Вы не добавили этот столбец в отдельный ключ, что является требованием для столбцов автоматической нумерации в MySQL.
Сначала добавьте его в ключ / индекс с этим столбцом, затем удалите атрибут PK. Убедитесь, что у вас есть некоторый PK в таблице.
Ответ №2:
Вы не можете иметь auto_increment без ключа
Ответ №3:
Я подозреваю, что у вас есть AUTO_INCREMENT
настройки в вашем id
поле. Если это так, то значения в id
столбце должны быть уникальными.
Либо удалите AUTO_INCREMENT
атрибут в этом столбце (переопределив столбец без AUTO_INCREMENT
использования ALTER TABLE
команды), либо не указывайте id
значение в вашем INSERT
заявлении.
Комментарии:
1. Да, я просто собираюсь создать еще один столбец,
conversation_id
как предложил webarto в комментариях, и использовать текущийid
столбец для уникального идентификатора сообщения.
Ответ №4:
Сначала снимите AUTO_INCREMENT
флажок с вашего столбца и в качестве второго шага попробуйте снова удалить индекс
Комментарии:
1. Спасибо, я просто создам другой столбец
conversation_id
вместо этого, как предложил webarto в комментариях. Текущимid
будет уникальный идентификатор сообщения.
Ответ №5:
PRIMARY KEY
s также уникальны. столбцы auto_increment должны быть первичными ключами. Вы не можете удалить PRIMARY KEY
из столбца, не сделав его не auto_increment.
Однако я не думаю, что вам следует изменять вашу таблицу таким образом. Вы должны сохранить свои идентификаторы и либо создать новую таблицу с данными, которые вам нужно обновить, либо использовать UPDATE
вместо INSERT
.
Комментарии:
1. Я не могу использовать
UPDATE
, потому что когда вы отправляете ответ… что бы это обновило?
Ответ №6:
Столбцы с первичными ключами не могут иметь дубликатов, иначе они теряют свою уникальность. MySQL предотвратит одинаковые значения. Необходимость изменять значения первичного ключа также является плохой новостью. Возможно, вы захотите пересмотреть подход к тому, что вы делаете, и, возможно, создать больше таблиц.
Комментарии:
1. Он хочет удалить первичный ключ, он не пытается его добавить