72ответ(ов) в теме
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
1
10:03
Версия WP-Recall: 16.8.11
Версия дополнения: 1.8.1

Доброго дня! Установил в настройках галочку "группировать достижения". Все вроде бы работает, но немножко не правильно.

Вот у меня есть группа "За комментарии" - x1, x10, x50 и т.д. При включенной группировке в ЛК показывается достижение за x1, хотя по логике должно показываться за x50.

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
2
10:27

Ну да если вначале добавить ачивку за 50 комментов а потом за 10 комментов, то ID ачивки за 10 комментов будет выше.

Вообщем это можно исправить только добавлением в таблицу статистики еще одного столбца ID с auto_increment, в след обновлении может добавлю, если ничего другого не придумаю

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
3
10:33

Напишите какие у вас ID ачивок "За комментарии" - x1, x10, x50 в админке указаны?

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
4
10:37

Достижения добавлялись по порядку. За х1 коммент - id=15, за x10 - id=16, за х50 - id=17 и так далее.

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
5
10:51

Kerncraft1 сказал(а)
Достижения добавлялись по порядку. За х1 коммент - id=15, за x10 - id=16, за х50 - id=17 и так далее.

это вы посмотрели или по памяти?

Вот запрос который все это дело формирует:

        $get_a = $wpdb->get_results(""
                . "SELECT " . RCL_PREF . "achievement.*, tmp.date "
                . "FROM ("
                . "SELECT * FROM " . RCL_PREF . "achievement_stats "
                . "WHERE user_id = $user_id ORDER BY date DESC, achiev_id DESC) as tmp "
                . "INNER JOIN " . RCL_PREF . "achievement ON tmp.achiev_id = " . RCL_PREF . "achievement.ID "
                . "GROUP BY type "
                . "LIMIT $limit", ARRAY_A);

т.е. вначале берутся все ачивки юзера и сортируются по дате, например:

15 - дата 04.12.2017
16 - дата 05.12.2017
17 - дата 06.12.2017

После сортировки

17 - дата 06.12.2017
16 - дата 05.12.2017
15 - дата 04.12.2017

Затем сортируются по ID, но у нас все останется так же т.к. ID и так по убиванию идут.

Затем они групируются и берется только первое вхождение, т.е. 17

Так что я не могу сказать в чем проблема.

Посмотрите точно в админке так ли идут ID как вы сказали, иначе я хз

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
6
10:58

Именно в админке посмотрел. Меня же именно это и удивило, так как явно по логике должны именно достижения с наивысшим ID показываться.

Скрин из админки -

Вы не можете просматривать опубликованные ссылки

Скрин с ЛК -

Вы не можете просматривать опубликованные ссылки

Как видите, так и с остальными достижениями, а не только с комментариями.

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
7
11:00

Стоп. Я помниться еще когда только купил доп, редактировал файл lk_achiev.php в /wp-content/wp-recall/templates/

наверное тут собака зарыта?

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
8
11:03

Хотел проверить предположение и включить вывод в блоке автора, но тут беда в админке - пропали ползунки 🙁
Скрин -

Вы не можете просматривать опубликованные ссылки
0
Вова (Otshelnik-Fm)
не в сети 3 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
9
11:04

Kerncraft1 сказал(а)
пропали ползунки

Вы не можете просматривать опубликованные ссылки
0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
10
11:05

Kerncraft1 сказал(а)
Стоп. Я помниться еще когда только купил доп, редактировал файл lk_achiev.php в /wp-content/wp-recall/templates/

наверное тут собака зарыта?

Нет, шаблон отображает результат из бд, на получение он не влияет.

Попробуйте в index.php плагина на 424 строке удалить все, т.е. вот это:

. "ORDER BY date DESC, achiev_id DESC "

Затем если не поможет в 421 строке DESC заменить на ASC

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
11
11:07

И еще скрин бы с вкладкой последних достижений юзера, где эта проблема

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
12
11:17

Чем дальше, тем веселей. Теперь вообще вывод достижений из ЛК пропал. Подозреваю, что по той же причине, что и ползунки в админке. Сейчас доделаю основную работу и буду более вдумчиво ковырять.

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
13
13:30

Так. С ползунками вроде разобрался - достижения в ЛК вернулись)

Выполнил ваши рекомендации, но все осталось по прежнему.

Скрин, который вы просили -

Вы не можете просматривать опубликованные ссылки

П.С. В блоке автора так же выводится первое достижение из группы.

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
14
13:47

Kerncraft1 сказал(а)
Так. С ползунками вроде разобрался - достижения в ЛК вернулись)

Выполнил ваши рекомендации, но все осталось по прежнему.

Скрин, который вы просили -

Вы не можете просматривать опубликованные ссылки

П.С. В блоке автора так же выводится первое достижение из группы.

Если вы поменяли порядок сортировки с DESC на ASC то должно быть все наоборот. Какая версия mysql стоит?

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
15
13:52

5.5.56-MariaDB - MariaDB Server

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
16
14:15

Может быть в этом дело, я особо не шарю в различиях таблиц, у меня mysql стоит, а mariadb это переделанная mysql как я понял.

У вас есть тестовый сайт?

В index.php плагина начиная c 417 строки весь запрос замените на:

        $get_a = $wpdb->get_results(""
                . "SELECT * FROM " . RCL_PREF . "achievement_stats "
                . "WHERE user_id = $user_id ORDER BY date DESC, achiev_id DESC ", ARRAY_A);
        var_dump($get_a);
        die();

И посмотрите страницу где выводятся достижения, там должен отобразиться массив всех ачивок отсортированный по дате получения, его скопируйте.

Только бекап того что заменяете не забывайте делать

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
17
14:21

Спойлер

array(17) { [0]=> array(5) { ["achiev_id"]=> string(2) "29" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-06 11:18:45" ["type"]=> string(23) "rating_all_sum_received" ["status"]=> string(1) "1" } [1]=> array(5) { ["achiev_id"]=> string(2) "28" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-06 11:18:45" ["type"]=> string(23) "rating_all_sum_received" ["status"]=> string(1) "1" } [2]=> array(5) { ["achiev_id"]=> string(2) "23" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 12:07:32" ["type"]=> string(26) "rating_post_count_received" ["status"]=> string(1) "1" } [3]=> array(5) { ["achiev_id"]=> string(2) "22" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 12:07:32" ["type"]=> string(26) "rating_post_count_received" ["status"]=> string(1) "1" } [4]=> array(5) { ["achiev_id"]=> string(2) "21" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 12:07:32" ["type"]=> string(26) "rating_post_count_received" ["status"]=> string(1) "1" } [5]=> array(5) { ["achiev_id"]=> string(2) "11" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [6]=> array(5) { ["achiev_id"]=> string(2) "10" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [7]=> array(5) { ["achiev_id"]=> string(1) "9" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [8]=> array(5) { ["achiev_id"]=> string(1) "8" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [9]=> array(5) { ["achiev_id"]=> string(1) "7" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [10]=> array(5) { ["achiev_id"]=> string(1) "6" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [11]=> array(5) { ["achiev_id"]=> string(1) "5" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" ["type"]=> string(9) "post_post" ["status"]=> string(1) "1" } [12]=> array(5) { ["achiev_id"]=> string(2) "18" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:39:55" ["type"]=> string(7) "comment" ["status"]=> string(1) "1" } [13]=> array(5) { ["achiev_id"]=> string(2) "17" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:39:55" ["type"]=> string(7) "comment" ["status"]=> string(1) "1" } [14]=> array(5) { ["achiev_id"]=> string(2) "16" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:39:55" ["type"]=> string(7) "comment" ["status"]=> string(1) "1" } [15]=> array(5) { ["achiev_id"]=> string(2) "15" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:39:55" ["type"]=> string(7) "comment" ["status"]=> string(1) "1" } [16]=> array(5) { ["achiev_id"]=> string(1) "2" ["user_id"]=> string(1) "1" ["date"]=> string(19) "2017-11-26 13:40:15" ["type"]=> string(8) "register" ["status"]=> string(1) "0" } }

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
18
14:44

Попробуйте для теста так сделать:

Весь запрос с 417 строки заменить на

        $get_a = $wpdb->get_results(""
                . "SELECT achiev_id FROM " . RCL_PREF . "achievement_stats "
                . "WHERE user_id = $user_id ORDER BY date DESC, achiev_id DESC ", ARRAY_A);

        foreach ($get_a as $a) {

            $a_id_list[] = $a['achiev_id'];
        }

        $a_id_list = implode(',', $a_id_list);

        $get_a = $wpdb->get_results(""
                . "SELECT " . RCL_PREF . "achievement.*, " . RCL_PREF . "achievement_stats.date "
                . "FROM " . RCL_PREF . "achievement, " . RCL_PREF . "achievement_stats "
                . "WHERE " . RCL_PREF . "achievement.ID IN($a_id_list) "
                . "AND " . RCL_PREF . "achievement.ID = " . RCL_PREF . "achievement_stats.achiev_id "
                . "GROUP BY type "
                . "ORDER BY date DESC, ID DESC "
                . "LIMIT $limit", ARRAY_A);

И посмотреть как выводится.

Опять же бекап делайте и желательно на тестовом сайте

Редакции сообщения
06.12.2017 14:45PreciПричина: не указано
0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
19
14:48

Странно, но ничего не выводится. Работает как и раньше.

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
20
14:48

Может вардамп надо добавить?

Добавил.

Вывод:

Спойлер

array(5) { [0]=> array(11) { ["ID"]=> string(2) "28" ["name"]=> string(17) "Рейтинг x1" ["descr"]=> string(77) "Получить первую единицу рейтинга на сайте" ["type"]=> string(23) "rating_all_sum_received" ["count"]=> string(1) "1" ["img_id"]=> string(5) "29345" ["img_url"]=> string(57) "https://mod-land.ru/wp-content/uploads/2017/12/rating.png" ["reward"]=> string(24) "{"rating":0,"balance":0}" ["group_id"]=> string(1) "0" ["status"]=> string(1) "1" ["date"]=> string(19) "2017-12-06 11:18:45" } [1]=> array(11) { ["ID"]=> string(2) "21" ["name"]=> string(22) "Первый лайк!" ["descr"]=> string(70) "Получить первый лайк своей публикации" ["type"]=> string(26) "rating_post_count_received" ["count"]=> string(1) "1" ["img_id"]=> string(5) "28780" ["img_url"]=> string(55) "https://mod-land.ru/wp-content/uploads/2017/12/like.png" ["reward"]=> string(24) "{"rating":0,"balance":0}" ["group_id"]=> string(1) "0" ["status"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 12:07:32" } [2]=> array(11) { ["ID"]=> string(1) "5" ["name"]=> string(21) "Модмейкер x1" ["descr"]=> string(61) "Опубликовать первый мод на сайте." ["type"]=> string(9) "post_post" ["count"]=> string(1) "1" ["img_id"]=> string(5) "28778" ["img_url"]=> string(61) "https://mod-land.ru/wp-content/uploads/2017/12/contract-1.png" ["reward"]=> string(24) "{"rating":0,"balance":0}" ["group_id"]=> string(1) "0" ["status"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:40:48" } [3]=> array(11) { ["ID"]=> string(2) "15" ["name"]=> string(35) "Первый комментарий" ["descr"]=> string(68) "Оставить первый комментарий на сайте" ["type"]=> string(7) "comment" ["count"]=> string(1) "1" ["img_id"]=> string(5) "28779" ["img_url"]=> string(64) "https://mod-land.ru/wp-content/uploads/2017/12/speech-bubble.png" ["reward"]=> string(24) "{"rating":0,"balance":0}" ["group_id"]=> string(1) "0" ["status"]=> string(1) "1" ["date"]=> string(19) "2017-12-02 11:39:55" } [4]=> array(11) { ["ID"]=> string(1) "2" ["name"]=> string(30) "Теперь ты с нами!" ["descr"]=> string(55) "За регистрацию на сайте Mod-Land.ru" ["type"]=> string(8) "register" ["count"]=> string(1) "0" ["img_id"]=> string(5) "28024" ["img_url"]=> string(66) "https://mod-land.ru/wp-content/uploads/2017/11/handshake_78379.png" ["reward"]=> string(24) "{"rating":0,"balance":0}" ["group_id"]=> string(1) "0" ["status"]=> string(1) "0" ["date"]=> string(19) "2017-11-26 13:40:15" } }

Редакции сообщения
06.12.2017 14:50Kerncraft1Причина: не указано
0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
21
15:06

Вот еще, во время последней смены кода, который вы писали, в логах nginx проскочило такое:

2017/12/06 14:49:03 [error] 19750#19750: *21487 FastCGI sent in stderr: "PHP message: PHP Warning:  implode(): Invalid arguments passed in /var/www/kerncraft1/data/www/mod-land.ru/wp-content/wp-recall/add-on/achievement-system/index.php on line 429
PHP message: База данных WordPress возвратила ошибку You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') AND ytbao_rcl_achievement.ID = ytbao_rcl_achievement_stats.achiev_id GROUP BY ' at line 1 в ответ на запрос SELECT ytbao_rcl_achievement.*, ytbao_rcl_achievement_stats.date FROM ytbao_rcl_achievement, ytbao_rcl_achievement_stats WHERE ytbao_rcl_achievement.ID IN() AND ytbao_rcl_achievement.ID = ytbao_rcl_achievement_stats.achiev_id GROUP BY type ORDER BY date DESC, ID DESC LIMIT 3, выполненный require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/jannah-child/single.php'), rcl_get_author_block, rcl_get_userlist, rcl_get_include_template, rcl_include_template, include('/wp-recall/templates/user-rows.php'), rcl_user_description, do_action('rcl_user_description'), WP_Hook->do_action, WP_Hook->apply_filters, rcl_a_show_in_userli" while reading upstream, client: 188.16.129.233, server: mod-land.ru, request: "GET /ccd-mods/avtomobil-lamborghini-urus-dlya-city-car-driving-1-5-1-1-5-4.html HTTP/1.1", upstream: "fastcgi://unix:/var/www/php-fpm/kerncraft1.sock:", host: "mod-land.ru"

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
22
15:10

Я не знаю в чем может быть проблема, у вас база почему то не хочет сортировать нормально.
Ждите обновления, я там новую колонку добавлю и возможно нормализуется все, правда у тех кто уже получал ачивки может останется, тут только поможет удаление ачивок у юзеров что бы они заново их получили.

Вообщем ждите обновления, там посмотрите как выводится

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
23
15:10

Хорошо. Пусть тема тогда открытая останется пока.

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
24
13:33

Проверяйте, обновил плагин.

Но проверяйте на каком то новом юзере или тестовом сайте, т.к. раньше в стату записывалась только дата получения ачивки и если юзер получал сразу 2 ачивки, например за 1 и за 10 комментариев - дата и время были одинаковые и из-за этого была проблема. Сейчас я добавил новый столбец где пишется ID и у более поздней ачивки будет более высокий ID (даже с одинаковой датой) и такой проблемы быть не должно. Но уже полученным ачивкам присвоить корректный ID нельзя, из-за этого у тех кто уже получил ачивки может выводиться как и раньше некорректно.

Если есть возможность то советую удалить всем полученные ачивки в таблице achievement_stats, они их получат вновь при каждом действии (например при публикации комментария юзер получит все ачивки которые ему доступны)

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
25
14:11

Так, пока уведомление о новой версии еще не прилетело. Вопрос: а если я удалю доп - он удалит таблицы из БД? Просто наверное проще потом поставить его заново и добавить ачивки (благо их не много пока).

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
26
14:24

Kerncraft1 сказал(а)
Так, пока уведомление о новой версии еще не прилетело. Вопрос: а если я удалю доп - он удалит таблицы из БД? Просто наверное проще потом поставить его заново и добавить ачивки (благо их не много пока).

Ваша версия не удалит, в обновлении будет удаляться таблица при удалении допа.

А вообще смысла нет, достаточно табличку с полученными достижениями очистить

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
27
17:04

Такс... Собственно, что я сделал:

1. Очистил таблицу achievement_stats
2. Обновил доп
3. Добавил одну запись

Результат. Пользователь получил все необходимые достижения, но в ЛК все также выводиться самое первое достижение из группы.

Скрин таблицы achievement_stats -

Вы не можете просматривать опубликованные ссылки

Скрин ЛК -

Вы не можете просматривать опубликованные ссылки
Редакции сообщения
07.12.2017 17:06Kerncraft1Причина: не указано
0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
28
17:12

А ID ачивки Модмейкер х1 = 5? Должна показываться ачивка с ID 11

0
Kerncraft1
не в сети 1 год
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
29
17:14

Модмейкер х1 = 5 (верно).

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
30
17:33

А ошибка в логах есть какая-то? У вас MYSQL почему то не хочет сортировать с подзапросом

0
Тема закрыта. Публикация новых сообщений запрещена.