tunofak Posted December 19, 2018 Share Posted December 19, 2018 Всем привет.Есть список аватаров /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 More sharing options...
siv1987 Posted December 20, 2018 Share Posted December 20, 2018 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 More sharing options...
siv1987 Posted December 20, 2018 Share Posted December 20, 2018 В 4.2 есть функция "Letters avatars for members without profile photo", которая делает примерно тоже самое. Link to comment Share on other sites More sharing options...
tunofak Posted December 20, 2018 Author Share Posted December 20, 2018 (edited) Я сонный был, не правильно строку выбрал - 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 December 20, 2018 by tunofak Link to comment Share on other sites More sharing options...
siv1987 Posted December 20, 2018 Share Posted December 20, 2018 Зачем ее видеть? Это временная таблица для инкремента, после отработки она удаляется. Более изящный вариант без таблицы я привел с переменной. Не совсем понял куда экспортировать и что там присвоить?Если у вас есть список аватаров и хотите присвоить их пользователям то проще это уже сделать через php, и не заниматся извратом с mysql. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now