Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля
Страницы: 1  |  2  |  3
27.03.2011, 20:36
Гость
Гость

Прямо в listQuery нужно вставить условие ".($... ? "" : "").", например

Код:
".listQuery("SELECT count(Message_ID) AS cnt FROM Message96 WHERE User_ID='$AUTH_USER_ID'", 
"У меня ".($data[cnt] ? "объектов: \$data[cnt]" : "объектов нет")."")."


Не работает условие, т.к. $data[cnt] здесь пустая. Потому что как я понимаю работает только с маскировчным слэшем \$data[cnt] и только в html-коде.

Но в условии при определении истины и лжи как преобразовать в полноценную переменную без маскировки и использовать в коде php?
Или если суть вопроса понятен, может как-то по другому реализовать?
27.03.2011, 23:23
Denis
Denis

Зарегистрирован:
2008-07-15
Сообщений: 666

Чтобы не заморачиваться с экраниваронием, можно поступить так:

Код:
".( ($cnt = $db->get_var("SELECT count(Message_ID) AS cnt FROM Message96 WHERE User_ID='$AUTH_USER_ID'")) ? 
"У меня $cnt объектов" :
"объектов нет" )."


Ксю доставляет...
28.03.2011, 13:42
Гость
Гость

Понятно.
Спасибо!
28.03.2011, 17:32
Гость
Гость

вопрос еще возник.
Если в списке объектов (в поле "Объект в списке") использовать запрос $db->get_var("SELECT...") или (int)s_list_class(), то получается сколько объектов будет выводиться столько и запросов?
Это нормально или плохо?
Мне кажется такие вещи нужно в цикл помещать, а делать один запрос с выборкой в цикле. Когда именно вывод списка объектов.
28.03.2011, 18:23
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Цитата:
то получается сколько объектов будет выводиться столько и запросов?

Да.

Цитата:
Это нормально или плохо?

Зависит от проекта. В 99% - это нормально, в 1% когда требуется минимизация, то, конечно, плохо. Это вы как разработчик должны сами определять путь решения задачи в своем конкретном случае.

Цитата:
Мне кажется такие вещи нужно в цикл помещать, а делать один запрос с выборкой в цикле. Когда именно вывод списка объектов.

Делайте, как считаете нужным.

Ваще, конкретно в вашем примере - ваш запрос на подсчет кол-ва преполагает полный перебор всех записей в базе по каждому юзеру - это как не крути один из самых ресурсоемких запросов. И если на одной странице у вас 10-20 юзеров, то сами прикиньте как ваша база раком встанет. На форумах делается все иначе. В таблице юзеров добавляется поле - кол-во, которое каждый раз пересчитывается при добавлении/удалении записи на форуме по каждому юзеру. В этом случае вам никаких ресурсоемких подзапросов делать не придется.

Вот и думайте сами. Если у вас 10 юзеров и 10-20 постов у каждого - это одно, а если у вас 1000 юзеров и каждую минуту на форуме кто-то постит - это совсем другое.

Temet nosce...
29.03.2011, 07:51
Гость
Гость

И все же улыбка

Предполагается, что у меня будет 1000 юзеров, но это зарегистрированные не на форуме, а зарегистрированные на сайте. При выводе их в списке (конечно постранично, по 10-20 юзеров на странице) рядом с каждым должно стоять кол-во добавленных на сайте каждым из них статей, новостей, комментариев и т.д.

Посещаемость предполагается несколько тысяч в сутки, года через три.

Так вот, как я понимаю, это уже дикое кол-во запросов на одной только странице из всего списка юзеров, если релизовать средствами Нетката, как предлагалось выше, т.е. $db->get_var("SELECT...") или listQuery("SELECT...").
Я не собираюсь выкупать или даже арендовать сервер (сайт не коммерческий, т.е. невыгодно), а только использую недорогой ограниченный VPS, поэтому выше варианты неприемлемы и других из средств Нетката нет. Я правильно понимаю?

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

Но как реализовать эти циклы в полях префикса, списка объектов и суффикса компонента вообще не представляю, с php пока что не на Ты.

Помогите пожалуйста, может как-то на примере.
29.03.2011, 10:23
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Цитата:
поэтому выше варианты неприемлемы и других из средств Нетката нет. Я правильно понимаю?


читайте внимательней:
Цитата:
На форумах делается все иначе. В таблице юзеров добавляется поле - кол-во, которое каждый раз пересчитывается при добавлении/удалении записи на форуме по каждому юзеру. В этом случае вам никаких ресурсоемких подзапросов делать не придется.

т.е. делаете счетчик и постоянно его инкрементируете по событию добавления новый записей. Можете сделать 10 счетчиков - для каждого компонента свой.

Temet nosce...
29.03.2011, 11:43
Гость
Гость

Эх, если бы я умел делать счетчики. Как Вы советуете для меня это очень сложно, только учусь.

Ходят разговоры, что на Неткате можно делать все что угодно используя API, но не говорится, что это "все что угодно" будет работать только на небольших сайтах с небольшим кол-вом юзеров и небольшим объемом таблиц.
Получается нужно извращаться своим кодом, зачем же тогда Неткат.
29.03.2011, 13:51
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 576

Цитата:
Получается нужно извращаться своим кодом, зачем же тогда Неткат.

Ну, это типа фундамент + мини-завод по выпуску стеновых блоков + пара-тройка нужных инструментов. А какой там конек на крышу поставить - это вы выдумываете (и выпиливаете) сами.

По теме:
Запросы и циклы можно, например, выполнить в поле Системные настройки компонента.
А вообще, для таких вещей предназначен модуль Интерфейс разработчика и, в первую очередь, файл functions.inc.php этого модуля. Пишите там все, чего вам не хватает в API.

Но.
Если хотите дойти до нескольких тысяч в сутки, то послушайте DiGGy и экономьте буквально на каждом запросе.

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
30.03.2011, 14:55
Гость
Гость

Решил пока привязать к общему запросу в системных настройках, теперь не на каждый объект запрос.

Например, подсчет кол-ва комментариев по каждой новости:

Код:
$query_join = "LEFT JOIN Message115 AS b ON (a.Message_ID=b.Object_ID AND b.Checked = '1')";
$query_select = "count(b.Message_ID) AS cnt_mess";
$query_group = "b.Object_ID";
$result_vars = "\$cnt_mess";
30.03.2011, 18:02
Гость
Гость

В системных настройках если привязывать две таблицы, то проблема с $result_vars.

Нало связать с основной (новостной) две таблицы (комментариев и рейтинга).

Тупо, чисто из логики соображая, в сист. настройках пишу так:

1. Связываю таблицу первую:
$query_join = "LEFT JOIN Message115 AS b ON (a.Message_ID=b.Object_ID AND b.Checked = '1')";
$query_select = "count(b.Message_ID) AS cnt_mess";
$query_group = "b.Object_ID";
$result_vars = "\$cnt_mess";
2. Связываю таблицу вторую:
$query_join = "LEFT JOIN Message117 AS c ON (a.Message_ID=c.Object_ID)";
$query_select = "count(c.Message_ID) AS cnt_rtg";
$query_group = "c.Object_ID";
$result_vars = "\$cnt_rtg";

В итоге в списке объектов получаю только вторую переменную $cnt_rtg из второго $result_vars. Если же второй $result_vars убрать, то в списке объектов становится доступна первая переменная $cnt_mess из первого $result_vars. Но обе сразу не доступны.

Получается, что $result_vars в системных настройках может быть описана только один раз?
Как же тогда получить новые переменные $cnt_mess и $cnt_rtg из двух разных таблиц (из двух $query_join)?
Или я что-то не так делаю?

Пробовал прописать обе таблицы с условиями в одну $query_join, также выборку полей по обоим таблицам в одну $query_select и обе новые переменные в один $result_vars, но так тоже не получается, какая-то ерунда вылезает.
198 196 2011-04-02 15:18:44 11139
Страницы: 1  |  2  |  3
Описание проекта