Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
tunofak

Присвоение всем пользователям Аватары

Рекомендованные сообщения

Всем привет.

Есть список аватаров /update/avatar/1.jpg и идут они от 1.jpg по 2000.jpg/

И второй список /update/avatar_smile/1.jpg и идут они от 1.jpg по 2000.jpg/

Первые аватары в папке avatar размером 150х150

Вторые аватары в папке avatar_smile размером 100х100

Аватары что в первой папке что во второй идентичны.

 

И есть список пользователей.

SELECT * FROM `core_members`
WHERE `core_members`.`member_id` > 15;

 

Мне нужно этим пользователям, через БД, с помощью SQL запроса, расставить значения.

Например первый пользователь в строке pp_main_photo сделать значение /update/avatar/1.jpg и в строке pp_thumb_photo сделать значение /update/avatar_smile/1.jpg

 

HEELP

Поделиться сообщением


Ссылка на сообщение

I. Если ид пользователей идут по порядку и совпадают с именами файлов, можно обойтись простым sql запросом

 

UPDATE core_members SET pp_main_photo=CONCAT('update/avatar/', member_id, '.jpg'), pp_thumb_photo=CONCAT('update/avatar_smile/', member_id, '.jpg') WHERE member_id > 15

Учтите что форум использует путь к аватарам относительно папки /uploads/ и запрещает перемещение вне через ../

 

 

II. Если же у вас 2000 пользователей, но ид идут в сильный разнос - 1, 100 следующий 450 и тд, то нужно использовать инкремент. В mysql в первую очередь на ум приходит временная таблица с полем ауто инкрементом.

 

CREATE TABLE core_members_temp (id mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, member_id mediumint(8));
INSERT INTO core_members_temp (member_id) SELECT member_id FROM core_members WHERE member_id > 15 ORDER BY member_id ASC;
UPDATE core_members m INNER JOIN core_members_temp t ON (m.member_id=t.member_id) SET pp_main_photo=CONCAT('update/avatar/', t.id, '.jpg'), pp_thumb_photo=CONCAT('update/avatar_smile/', t.id, '.jpg');
DROP TABLE core_members_temp;

 

..то же самое, но только с использование переменной

 

SET @position = 0;
UPDATE core_members m INNER JOIN ( SELECT member_id, (@position := @position + 1) as position FROM core_members WHERE member_id > 15 ORDER BY member_id ASC ) t ON m.member_id = t.member_id SET pp_main_photo=CONCAT('update/avatar/', t.position, '.jpg'), pp_thumb_photo=CONCAT('update/avatar_smile/', t.position, '.jpg');

Поделиться сообщением


Ссылка на сообщение

В 4.2 есть функция "Letters avatars for members without profile photo", которая делает примерно тоже самое.

Поделиться сообщением


Ссылка на сообщение
12/20/18 14:57 (изменено)

Я сонный был, не правильно строку выбрал - member_posts > 15 Правильно.

 

В итоге составил я так

CREATE TABLE core_members_temp (id mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, member_posts mediumint(8));
INSERT INTO core_members_temp (member_posts) SELECT member_posts FROM core_members WHERE member_posts > 15 ORDER BY member_posts ASC;
UPDATE core_members m INNER JOIN core_members_temp t ON (m.member_posts=t.member_posts) SET pp_main_photo=CONCAT('avatar/', t.id, '.jpg'), pp_thumb_photo=CONCAT('avatar_smile/', t.id, '.jpg');
DROP TABLE core_members_temp;

 

Пишет что - core_members_temp существует, но я её в упор не вижу.

 

У меня версия 4.3.4 но не знаю, где такая функция, гуглил тоже не увидел) А ну там выбор аватара по первому символу ника, у меня все аватары цветные.

 

 

А есть вариант экспортировать 1893 mimber_id и потом им присвоить по списку строки?

Правда сам SQL запрос будет большой.

Изменено пользователем tunofak

Поделиться сообщением


Ссылка на сообщение

Зачем ее видеть? Это временная таблица для инкремента, после отработки она удаляется. Более изящный вариант без таблицы я привел с переменной.

 

Не совсем понял куда экспортировать и что там присвоить?

Если у вас есть список аватаров и хотите присвоить их пользователям то проще это уже сделать через php, и не заниматся извратом с mysql.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...