MySQL statement prepare error [1176]: Key 'username' doesn't exist in table 'xf_user'

baltun

Администратор
Сообщения
11.702
Реакции
2.814
Баллы
1.833
Один из наших пользователей обратился к нам с такой ошибкой (в заголовке) как оказалась причина такой ошибки отсутствие у таблице индексов и ключей. Наш алгоритм действий.
Смотрим есть у нас индексы или нет:
SQL:
SHOW INDEX FROM xf_user;

В нашем случае их нет список пуст пытаемся повесить индексы но у нас не получается т.к. у нас в таблице есть еще и дубли записей:
SQL:
SELECT username, COUNT(*)
FROM xf_user
GROUP BY username
HAVING COUNT(*) > 1;

Пытаемся избавиться от дублей:
SQL:
CREATE TABLE table_dumpes AS SELECT DISTINCT * FROM xf_user;
DROP TABLE xf_user;
RENAME TABLE table_dumpes TO xf_user;
Что мы сделали, мы создали таблицу и перенесли туда записи без дублей, потом удалили оригинальную таблицу и переименовали нашу новую таблицу в старую как и должно быть.

Далее мы повесили индексы:
SQL:
ALTER TABLE `xf_user`
  ADD PRIMARY KEY (`user_id`),
  ADD UNIQUE KEY `username` (`username`),
  ADD KEY `email` (`email`),
  ADD KEY `permission_combination_id` (`permission_combination_id`),
  ADD KEY `user_state` (`user_state`),
  ADD KEY `last_activity` (`last_activity`),
  ADD KEY `last_summary_email_date` (`last_summary_email_date`),
  ADD KEY `message_count` (`message_count`),
  ADD KEY `trophy_points` (`trophy_points`),
  ADD KEY `reaction_score` (`reaction_score`),
  ADD KEY `register_date` (`register_date`),
  ADD KEY `question_solution_count` (`question_solution_count`),
  ADD KEY `vote_score` (`vote_score`),
  ADD KEY `staff_username` (`is_staff`,`username`),
  ADD KEY `resource_count` (`xfrm_resource_count`);
После всех действий ошибка пропала при нажатии на вкладку пользователи в панели управления.
 
Назад
Верх Низ