Jump to content

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


tunofak
 Share

Recommended Posts

Всем привет.

Есть список аватаров /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

Link to comment
Share on other sites

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');

Link to comment
Share on other sites

Я сонный был, не правильно строку выбрал - 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 запрос будет большой.

Edited by tunofak
Link to comment
Share on other sites

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

 

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

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...