Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Помогите редактировать запрос

Помогите редактировать запрос


     28.09.2013    Общие вопросы по PHP    2551

вопрос
Здравствуйте, есть вот этот код


$rows = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category = '1' AND autor = '$user'");
    $games_num = $rows['count'];
    $tpl->set('{games-num}', $games_num);


в шаблоне я пишу {games-num} и выводит новости которые добавил пользователь в какой-то категории.

Проблема в том что у меня много категорий и делать много запросов не хорошо. Так вот помогите подредактировать этот код таким образом чтобы в шаблоне userinfo.tpl было так {games-num-1} где 1 это ID категории.

Ответил: ПафНутиЙ


Модуль
Вывод новостей текущего юзера:
{include file="engine/modules/user.news.counter.php?&userName=this&catId=1"}

Вывод новостей админа:
{include file="engine/modules/user.news.counter.php?&userName=admin&catId=5"}

Префикс кеша лучше оставить как есть, тогда кеш будет чиститься только при добавлении новостей.


UPD (dj-avtosh)

https://dle-faq.ru/faq/phpquest/6922-pomogite-redaktirovat-zapros.html#comment-id-17195
Отредактировал 29-09-2013, 14:18 - dj-avtosh
Причина: UPD BY DJ-AVTOSH

Комментарии пользователей (32)

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 11:56 - шашлычник

Приходит массив id категорий, юзаешь where category IN. Ну и далее в цикле запускаешь шаблонизатор регулярочкой.

skype: elhan.isaev

TheImDim
18

327 | 291

TheImDim - 28 сентября 2013 12:07 - Юзер

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


$rows = $db->super_query( "SELECT `category` FROM " . PREFIX . "_post WHERE `autor` = '$user'");
$row = $db->get_row( $rows );

if( $row ) {
  do {
         ++$games_num[ $row['category'] ];
} while( $row = $db->get_row( $rows ) );
}

foreach( $games_num as $key => $val ) {
   $tpl->set( '{games-num-'.$key.'}', $val );
}


dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 12:36 - шашлычник

Какой глупый код. Цикл пропускается как ресурс. Фу. Super_query с опущенным вторым параметром - вернет одно значение. Лучше не писать, без теста. Если плохо знаешь php.

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 12:40 - шашлычник

Далее переменную в запросе пропускаешь как строку, что в 8 раз дольше обработается, еже ли по всем правилам разделить через точки.

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 12:42 - шашлычник

Да и вообще не указаны типы переменных. Нет проверок, зато есть до и вайл. Понты.

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 12:45 - шашлычник

Да и вообще не понимаю момент, вопрос же в количестве новостей, при этом, однако, массив категорий приходит глобально как $cat_info, если не ошибаюсь и кэшируется в init.php

skype: elhan.isaev

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 28 сентября 2013 22:52 - Админ

не в init.php а в системном кеше.

Каков вопрос - таков и ответ. Просто помните об этом.

dj-avtosh
39

1479 | 390

dj-avtosh - 29 сентября 2013 04:11 - шашлычник

Я имел ввиду файл в котором контроллер написания кэша.

skype: elhan.isaev

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 29 сентября 2013 11:16 - Админ

а вот это хз)

Каков вопрос - таков и ответ. Просто помните об этом.

FastFud
50

1599 | 588

FastFud - 28 сентября 2013 13:28 - Юзер

Было бы так просто для меня я бы не задал этот вопрос ).
Можите сделать пример как правильно будет а то я буду пробовать где то месяц.

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 14:09 - шашлычник

Ну ты был близок к истине))

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 28 сентября 2013 14:18 - Юзер

так что ли


$rows = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category IN ('" . implode ( "','", $cat_info[$category_id] ) . "') AND autor = '$user'");

TheImDim
18

327 | 291

TheImDim - 28 сентября 2013 14:21 - Юзер

С super_query согласен, не заметил.

Да и вообще не указаны типы переменных. Нет проверок


Что за бред ты несешь? Я тут привел алгоритм каким образом можно подсчитать количество новостей у пользователя. Расписывать тут все я не собираюсь. Если есть желание и время, напиши скрипт, а не неси ерунду. А то на словах Лев Толстой, а на деле.

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 17:48 - шашлычник

Я знаю что я плохой программист)) просто любой язык кроме пэхэпэ :D не компилирует код без приведения типа. Это я тебе как Лев Толстой говорю. На деле я принимал участие в разработке сайта, на котором ты сейчас комментируешь, это так на заметку ;)

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 17:59 - шашлычник

Я для тебя ещё внизу про двойное создание переменной написал. Это есть кул))) Оперативы же много нынче на серваках)))

skype: elhan.isaev

TheImDim
18

327 | 291

TheImDim - 7 октября 2013 14:03 - Юзер

Где у меня двойное создание переменной? Ну да, этот процесс занимает целый гигабайт оперативной памяти в php. Вообще удивляют люди, которые выучат скриптовый язык и считают себя "программистами". А потом учат других жизни. Я не заявляю о себе как супер-пупер программист, и вам не советую заниматься балабольством, если конечно у Вас есть крупные проекты над которомы работали, покажите нам, чтобы мы знали с кем имеем дело, и не надо говорить что это dle-faq.ru.

dj-avtosh
39

1479 | 390

dj-avtosh - 7 октября 2013 14:38 - шашлычник


skype: elhan.isaev

TheImDim
18

327 | 291

TheImDim - 28 сентября 2013 18:12 - Юзер

Ну почему же любой язык, динамическая типизация есть и в ruby, python, perl и не только. Я не говорю, и не говорил что мой код оптимизирован и является обзразцовым, я лишь подсказываю как это можно сделать.

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 18:14 - шашлычник

No problem. Просто не стоит оценивать мои знания своими догадками. Тем более мой опыт работы. На личности переходить как то по юношески.

skype: elhan.isaev

budda555
19 | 9

budda555 - 28 сентября 2013 19:49 - Юзер

Я вот наблюдаю за беседой и пришел к выводу, что Вы просто неадекватны, так как комментировать подобным образом мысли гениального программиста вроде dj-avtosh-а, просто бессмысленно.
Занялись бы делом )

FastFud
50

1599 | 588

FastFud - 28 сентября 2013 14:24 - Юзер

TheLmDim

вот так работает без super_ как сказали )


    $rows = $db->query( "SELECT `category` FROM " . PREFIX . "_post WHERE `autor` = '$user'");
$row = $db->get_row( $rows );

if( $row ) {
  do {
         ++$games_num[ $row['category'] ];
} while( $row = $db->get_row( $rows ) );
}

foreach( $games_num as $key => $val ) {
   $tpl->set( '{games-num-'.$key.'}', $val );
}

FastFud
50

1599 | 588

FastFud - 28 сентября 2013 14:29 - Юзер

Есть 1 но

Исчезает количество новостей в целом и комментариев

FastFud
50

1599 | 588

FastFud - 28 сентября 2013 14:46 - Юзер

вот так работает


        $rows = $db->query( "SELECT `category` FROM " . PREFIX . "_post WHERE `autor` = '$user'");
        $rowz = $db->get_row( $rows );

if( $rowz ) {
  do {
         ++$m_num[ $rowz['category'] ];
}   while( $rowz = $db->get_row( $rows ) );
}

foreach( $m_num as $key => $val ) {
   $tpl->set( '{m-num-'.$key.'}', $val );
}


Но остается вопрос, правильно ли.

dj-avtosh
39

1479 | 390

dj-avtosh - 28 сентября 2013 17:57 - шашлычник

Мне нравится два раза подряд создание переменной $rowz, Анатоле бы не одобрил :D

skype: elhan.isaev

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 28 сентября 2013 22:53 - Админ

А не проще ли оформить модулем отдельным, что-то многовато кода лишнего на вскидку, к том же без кеша.?

Каков вопрос - таков и ответ. Просто помните об этом.

dj-avtosh
39

1479 | 390

dj-avtosh - 29 сентября 2013 11:18 - шашлычник

Попробуй, тестить негде было:



/**
  * Подсчет количества постов по каждой категории у определенного юзера
  */

      // Получим category для данного автора

      $pUserArray = $db->super_query ( "SELECT category FROM " . PREFIX . "_post WHERE autor = '" . $user . "'", TRUE );

      // Т.к. возможна мультикатегорийность, то пройдемся по каждой полученной категории

      if ( ! empty ( $pUserArray ) )
      {

              $countFromCategory = array();

              foreach ( $pUserArray as $_pua )
              {

                  $categoryArr = explode ( ',', $_pua['category'] );

                  if ( ! empty ( $categoryArr ) )
                  {

                      if ( is_array ( $categoryArr ) )
                      {

                          foreach ( $categoryArr as $_ca )
                          {

                              ! isset ( $countFromCategory[$_ca] ) ? $countFromCategory[$_ca] = 1 : $countFromCategory[$_ca]++;

                          }

                      } else {

                          ! isset ( $countFromCategory[$categoryArr] ) ? $countFromCategory[$categoryArr] = 1 : $countFromCategory[$categoryArr]++;

                      }

                  } else {

                      continue;

                  }

              }


              if ( ! empty ( $countFromCategory ) )
              {

                  foreach ( $countFromCategory as $_cID => $_cfc )
                  {

                      $tpl->set( '{m-num-' . $_cID . '}' , $_cfc );

                  }

              }

      }


skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 29 сентября 2013 12:12 - Юзер

dj-avtosh
Да работает, спасибо но если пользователь ничего не добавлял то остаются только теги {m-num-1}

Я добавил еще:


$tpl->set_block( "'\\[unews-num\\](.*?)\\[/unews-num\\]'si", "" );
                        $tpl->set( '[not-unews-num]', "" );
                        $tpl->set( '[/not-unews-num]', "" );


Ну и теперь работает как надо.

dj-avtosh
39

1479 | 390

dj-avtosh - 29 сентября 2013 14:17 - шашлычник

Молодец

skype: elhan.isaev

Nagibaka
5

42 | 34

Nagibaka - 7 октября 2013 14:58 - Эксперт

После прочтения этого увлекательного топика, сразу захотелось добавить новую фичу на сайт - около автарки добавить счетчики Epic Fail(ну или баттхерт) и Epic Win для каждого пользователя.

Frontend MotherFucker=:^^

TheImDim
18

327 | 291

TheImDim - 7 октября 2013 15:52 - Юзер

Не забудьте добавить кнопочку "Пофлудить" (ну или нести херню)

dj-avtosh
39

1479 | 390

dj-avtosh - 7 октября 2013 16:16 - шашлычник

Андрей, не спорь с программистом))) Он же крут))

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 7 октября 2013 16:17 - шашлычник

TheImDim это Шапошников 2)) Профессор программирования, называет нас мудаками, а у самого код быдло)))

skype: elhan.isaev

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы