72ответ(ов) в теме
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
31
17:37

В логах чисто все. Может на другом примере каком проверить работу БД? Вот к примеру страница со списком юзеров - работает же выборка по кол-ву комментариев, по дате регистрации и т.д.

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

Вот есть у меня в лк вкладка со списком публикаций (я ее делал на основе другого плагина). В ней можно сортировать записи по дате добавления.

Ссылка -

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

Если меняю на asc, то сперва показываются старые. Т.е. вроде работает сортировка.

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

Ну я говорю про сортировку с подзапросом. Просто сортировка работает это мы проверяли.

$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, ID DESC) as tmp "
          . "INNER JOIN " . RCL_PREF . "achievement ON tmp.achiev_id = " . RCL_PREF . "achievement.ID "
          . "GROUP BY type "
          . "ORDER BY tmp.date DESC "
          . "LIMIT $limit", ARRAY_A);

Вот тут внутри подзапрос который получает все ачивки юзера и сортирует их по дате и по ID если дата одинаковая. Затем пишет это во временную таблицу и уже в ней группирует по типу. У вас почему то либо сортировка сбрасывается после подзапроса, либо группировка выбирает не 1ое найденное значение, как должна, а последнее. Я подумаю как можно решить проблему, пока хз

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

Тут кстати на хабре наткнулся по гуглению "mariadb сортировка с подзапросом" -

Вы не можете просматривать опубликованные ссылки
0
Вова (Otshelnik-Fm)
не в сети 1 день
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
35
17:56

Kerncraft1

Оффтоп
профит есть от mariaDB? Реально снижает нагрузку и работает быстрей?
И еще интересует - с другими плагинами вы сталкивались - что работать отказывается и как часто?

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
36
17:56

Попробуйте в index.php 423 строку:

. "ORDER BY date DESC "

заменить на
. "ORDER BY NULL "

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

Не помогло.

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

профит есть от mariaDB? Реально снижает нагрузку и работает быстрей?
И еще интересует - с другими плагинами вы сталкивались - что работать отказывается и как часто?

Уже весьма давно сижу на MariaDB, так как она идет по дефолту на CentOS. Перечитал много сравнений - большинство мнений за марию.

За все время ни разу не сталкивался с проблемами

1
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
39
18:05

Попробуйте весь запрос с 416 строки заменить на:

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

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

Все по прежнему - без изменений.

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
41
18:08

А на такой если:

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

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

Снова не то(

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

А так:

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

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

не меняется

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
45
18:23

Так еще:

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

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

Все по старому

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

Я уточнить на всякий хочу один момент. Мы же меняем условия запроса только в секции if? Или нужно и секцию else убирать?
Скрин того что меняю -

Вы не можете просматривать опубликованные ссылки
0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
48
18:29

Я честно хз что этой mariadb не нравится. Попробую позже разделить на несколько запросов.

У вас база почему то после того как получила во временную таблицу tmp список ачивок упорядоченный по дате и ID, сбрасывает сортировку и при выполнении GROUP BY берет не первый результат с типом ачивки, а последний. Может конечно в запросе где ошибка, яв таких тонкостях не разбираюсь.

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
49
18:30

Kerncraft1 сказал(а)
Я уточнить на всякий хочу один момент. Мы же меняем условия запроса только в секции if? Или нужно и секцию else убирать?
Скрин того что меняю -

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

Да все правильно делаете, после else это запрос если не включена группировка по типу

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

Ок. буду ждать. Кстати - есть пустой сервак не нужный пока. На нем как раз тоже maria стоит. Могу дать доступ, чтобы потестили как вам удобнее. На серваке панелька isp 5, так что добавить тестовый сайтик легко можно.

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
51
18:34

Kerncraft1 сказал(а)
Ок. буду ждать. Кстати - есть пустой сервак не нужный пока. На нем как раз тоже maria стоит. Могу дать доступ, чтобы потестили как вам удобнее. На серваке панелька isp 5, так что добавить тестовый сайтик легко можно.

Ну если не лень можете сделать тестовый сайт и поставить туда плагин, мне нужен будет доступ только от админки сайта я попробую разобраться

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

Ок. Сейчас поставлю и настрою. Доступ в ЛС скину.

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
53
18:41

И еще так попробуйте:

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

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

Не... не меняется.

0
Preci
не в сети 3 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1646
55
01:18

Короче вся проблема в том, что mariadb не дружит с ORDER BY в подзапросах FROM, т.е. не хочет сортировать результат подзапроса, я не гуру sql но видимо это как то влияет на производительность, ну или как часто это любят просто кто-то решил что так правильно.

пока есть вариант только с 2умя запросами, может кто подскажет что более интересное, но я тока до такого допер:

       $get_a = $wpdb->get_results(""
               . "SELECT achiev_id "
               . "FROM " . RCL_PREF . "achievement_stats "
               . "WHERE ID IN (SELECT MAX(ID) as ID "
                                . "FROM " . RCL_PREF . "achievement_stats "
                                . "WHERE user_id = $user_id "
                                . "GROUP BY type "
                                . "ORDER BY 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 "
                . "ORDER BY date DESC, ID DESC "
                . "LIMIT $limit", ARRAY_A);

По сути запросы вроде не страшные, несмотря на свой вид. Плюс я добавлю кеш для отображения ачивок и тогда вообще будет пофигу. Пока можете заменить то, что меняли до этого, на то что выше, должно работать.

Редакции сообщения
08.12.2017 01:27PreciПричина: не указано
08.12.2017 01:30PreciПричина: не указано
0
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
56
09:33

Доброе утро! Большое спасибо, что продолжаете искать способы решения проблемы. С кодом выше группировка заработала как надо, но есть один косячок:

Если у человека еще нет достижений, то в лк, а также в юзерлисте выводится варнинг следующего содержания:

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 430

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

Kerncraft1 сказал(а)
Доброе утро! Большое спасибо, что продолжаете искать способы решения проблемы. С кодом выше группировка заработала как надо, но есть один косячок:

Если у человека еще нет достижений, то в лк, а также в юзерлисте выводится варнинг следующего содержания:

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 430

Перед

foreach ($get_a as $a) {

Добавьте:

        if(!$get_a){ 
            return false;
        }  

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

И еще одну проблемку заметил. Вот поставил человеку лайк - он получил достижение за кол-во оценок + достижение за сумму оценок (рейтинг). В ЛК одно и тоже достижение выводиться несколько раз. Скрин -

Вы не можете просматривать опубликованные ссылки
0
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
59
11:12

Варнинг пропал.

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

Странно но на тестовом сайте я такое не наблюдаю. Вы в нем внесли изменения в плагин?

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