помогите с запросами к БД

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
sergejjjjjjjjjjj
phpBB 1.4.4
Сообщения: 111
Стаж: 19 лет 10 месяцев
Откуда: Германия

помогите с запросами к БД

Сообщение sergejjjjjjjjjjj »

вот какие данные нужны (каждого пользователя):

Форум
- число постов
- число тем
- число слов во всех постах

Почта
-полученые сообщения
-отправленые сообщения

Личное
-дней на форуме

зарание спасибо! :wink:
"От судьбы не уйдешь, а если ушел - значит, не судьба!"
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 20 лет
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

а на свалке модов копались phpbbhacks.com?
запросы типа user statistic Most Active
а это смотрели http://www.phpbbhacks.com/forums/statistics.php
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
sergejjjjjjjjjjj
phpBB 1.4.4
Сообщения: 111
Стаж: 19 лет 10 месяцев
Откуда: Германия

Сообщение sergejjjjjjjjjjj »

Поручик писал(а):а на свалке модов копались phpbbhacks.com?
запросы типа user statistic Most Active
а это смотрели http://www.phpbbhacks.com/forums/statistics.php
Вы меня не так поняли. Вот к примеру есть пользователь Вася. Вот о нем мне нужны все данные. И тем же макаром нужно вывести таблицу о всех пользователях. :roll:
"От судьбы не уйдешь, а если ушел - значит, не судьба!"
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 20 лет
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

Я вас правильно понял. Вам нужна статистика по пользователю (вот вам и запрос к поисковой системе). Такие моды наверняка есть. Поищите (примерные запросы я вам дал). Если нет, будем думать. Есть кое-какие идеи, навеянные модом Invision View Profile. Вам о чем нибудь говорит этот код из мода

Код: Выделить всё

function get_forum_most_active($user)
{
	global $db, $userdata;

	if ( intval($user) == 0 )
	{
		$user = trim(htmlspecialchars($user));
		$user = substr(str_replace("\\'", "'", $user), 0, 25);
		$user = str_replace("'", "\\'", $user);
	}
	else
	{
		$user = intval($user);
	}

	$sql_forum = "SELECT forum_id, forum_name FROM " . FORUMS_TABLE . "
		ORDER BY forum_id";
	if ( !($result = $db->sql_query($sql_forum)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain forums list', '', __LINE__, __FILE__, $sql_forum);
	}

	$most_active_id = array();
	while ( $line = $db->sql_fetchrow($result) ) 
	{
		$most_active_id[] = $line['forum_id'];
		$most_active_name[$line['forum_id']] = $line['forum_name']; 
	}
	$db->sql_freeresult($result);

	$count_most_active_id = count($most_active_id);

	$most_active_posts = 0;
	$num_result = 0;

	foreach ( $most_active_id as $i )
	{
		$is_auth = auth(AUTH_VIEW, $i, $userdata);
		if ( $is_auth['auth_view'] == 1 )
		{
			$sql_most = "SELECT *
				FROM " . POSTS_TABLE . " 
				WHERE forum_id = $i AND poster_id = $user";
			if ( !($result = $db->sql_query($sql_most)) )
			{
				message_die(GENERAL_ERROR, 'Tried obtaining data for a non-existent user', '', __LINE__, __FILE__, $sql_most);
			}

			if ( $db->sql_numrows($result) > $most_active_posts )
			{
				$most_active_posts = $db->sql_numrows($result);
				$most_active_foren_id = $i;
				$most_active_forum_name = $most_active_name[$i];
			}
		}
	}

	return array('forum_id' => $most_active_foren_id, 'forum_name' => $most_active_forum_name, 'posts' => $most_active_posts);
}
sergejjjjjjjjjjj писал(а):-дней на форуме
Это тоже есть.

Код: Выделить всё

//
// Calculate the number of days this user has been a member ($memberdays)
// Then calculate their posts per day
//
$regdate = $profiledata['user_regdate'];
$memberdays = max(1, round( ( time() - $regdate ) / 86400 ));
Сканирование таблицы пользователей, выборка данных по каждому.

В общем, если всего того, что вам нужно, в одном флаконе нет, то спасибо будет стоит порядка нескольких часов, а то и дней, работы (написание кода, отладка, тестирование)
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
sergejjjjjjjjjjj
phpBB 1.4.4
Сообщения: 111
Стаж: 19 лет 10 месяцев
Откуда: Германия

Сообщение sergejjjjjjjjjjj »

Я просто хотел сделать так, чтобы звания давались не только за сообщения, но за то что я перечислил выше. все эти данные будут сложены в нихитрую формулу. и каждый день все бы автоматом обновлялось, например в какое-то определенное время и тем самым изменялось бы звания пользователей. вот по тому я и попросил показать мне примеры запросов (как это правильно делается, так как у меня не получается чего-то ничего :roll: ) чтобы знать из чего творить формулу.
"От судьбы не уйдешь, а если ушел - значит, не судьба!"
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 20 лет
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

Тода изучите mod Auto Group, На этом сайте он есть.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
sergejjjjjjjjjjj
phpBB 1.4.4
Сообщения: 111
Стаж: 19 лет 10 месяцев
Откуда: Германия

Сообщение sergejjjjjjjjjjj »

что-то я не сильно понял к чему это? :roll:

И вот еще какая проблема. вот на что у меня хватило мозгов

Код: Выделить всё

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

// Default page
// Eoi oi?ao caia?ieeou - oaa?eoa /* e */
if ( !$userdata['session_logged_in'] )
{
   redirect(append_sid("login.$phpEx?redirect=.$phpEx", true));
}

$sql = 'SELECT  u.user_id, u.username, u.user_regdate, u.user_posts, COUNT(DISTINCT t.topic_id) AS topics, t.topic_poster, COUNT(DISTINCT p.privmsgs_id) AS privmsgs_from, p.privmsgs_from_userid, COUNT(DISTINCT p.privmsgs_id) AS privmsgs_to, p.privmsgs_to_userid
        FROM '.USERS_TABLE.' u, '.TOPICS_TABLE.' t, '.PRIVMSGS_TABLE.' p
	    WHERE u.user_id <> ' . ANONYMOUS . '
		GROUP BY u.user_id';
        if ( !$result = $db->sql_query($sql) )
        {
          message_die(GENERAL_MESSAGE, 'Couldn\'t select information');
        }
		
if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{	
	    $username = $row['username'];
		$user_id = $row['user_id'];			
		$posts = $row['user_posts'];
		$topics = $row['topics'];		
		
		$privmsgs_from = $row['privmsgs_from'];
		$privmsgs_to = $row['privmsgs_to'];		
		
		$memberday = max(1, round( ( time() - $row['user_regdate'] ) / 86400 ));	
			
		$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
		$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
	
        $template->assign_block_vars('row', array(
		'ID' => $user_id,
		'NAME' => $username,		
		'POST' => $posts,
		'TOPICS' => $topics,		
		'PRIVMSGS_FROM' => $privmsgs_from,
		'PRIVMSGS_TO' => $privmsgs_to,			
        'MEMBERDAYS' => $memberday ,		
		'ROW_COLOR' => '#' . $row_color,
		'ROW_CLASS' => $row_class)
         );
	} 
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);
	
}
		
// Generate page
//

$page_title = $lang[''];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

make_jumpbox($phpbb_root_path .'viewforum.'.$phpEx);

// Load templates
//
$template->set_filenames(array(
        'body' => 'qqq.tpl')
);

$template->assign_vars(array( 
)	  
   );

$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>

Код: Выделить всё

<link href="subSilver.css" rel="stylesheet" type="text/css">
<table width="100%" border="0" cellpadding="0" cellspacing="0"> 
  <tr> 
    <td width="204" valign="top"><table width="100%"  border="0" cellpadding="0" cellspacing="0"> 
        <tr> 
          <td>{MENU_OUTPUT}</td> 
        </tr> 
      </table></td> 
    <td valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0"> 
        <tr> 
          <td><table width="100%"  border="0" cellpadding="0" cellspacing="0"> 
              <tr> 
                <td>{NAVIGATION_BOX}</td> 
              </tr> 
            </table></td> 
        </tr> 
        <tr> 
          <td><table width="100%"  border="0" cellpadding="0" cellspacing="0" class="forumline"> 
              <tr> 
                <td><table width="100%"  border="0" cellpadding="3" cellspacing="1" >
				  <tr class="thTop">
				    <th>ID</th>
                    <th>NAME</th>
                    <th>POSTS</th>
                    <th>TOPICS</th>
                    <th>MEMBERDAYS</th>
                    <th>PRIVMSGS FROM</th>
                    <th>PRIVMSGS TO</th>
                    <th>&nbsp;</th>
                    <th>&nbsp;</th>
                    <th>&nbsp;</th>
				  </tr>
				<!-- BEGIN row -->
                  <tr>
				    <td class="{row.ROW_CLASS}">{row.ID}</td>
                    <td class="{row.ROW_CLASS}">{row.NAME}</td>
                    <td class="{row.ROW_CLASS}">{row.POST}</td>
                    <td class="{row.ROW_CLASS}">{row.TOPICS}</td>
                    <td class="{row.ROW_CLASS}">{row.MEMBERDAYS}</td>
                    <td class="{row.ROW_CLASS}">{row.PRIVMSGS_FROM}</td>
                    <td class="{row.ROW_CLASS}">{row.PRIVMSGS_TO}</td>
                    <td class="{row.ROW_CLASS}">&nbsp;</td>
                    <td class="{row.ROW_CLASS}">&nbsp;</td>
                    <td class="{row.ROW_CLASS}">&nbsp;</td>
                  </tr>
				 <!-- END row -->
                </table> </td> 
              </tr> 
            </table></td> 
        </tr> 
      </table></td> 
  </tr> 
</table> 
<br clear="all" /> 
нужно чтобы показалывало не все количество постов и писем, а только то что относится к пользователю. вроде это делается с помощью WHERE и AND. только вот у меня ничего не получается
"От судьбы не уйдешь, а если ушел - значит, не судьба!"

Вернуться в «Поддержка phpBB 2.0.x»